Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 44

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 44 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 442019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 44)

// Возвратить массив из метода. иягпч яуясев; с1аяя Гассог ( /* Метод возвращает массив тассе, содержащий множители аргумента ппп1. при возврате из метода параметр пивгасгогя типа оог будет содержать количество обнаруженных множителей. */ рпбггс гпс(! Гзпорассогя(гпс ппв, оос гпс пивсассогя) ( гпс() васса = пен 1пс(80); // размер массива 80 выбран произвольно 1пс 1, // найти множители и поместить их в массив Гасгя.

Гог(1=2, 7'=0~ г < ппв/2 + 1у 1++) 1Г( (ппвз1)==0 ) ( тассе(7) = 1; ) ппвтассогя = 7 гегпгп Гасгя; Глава 8. Подробнее о методах и вассах 235 с1аяя Гьпогастотя ( ятатьс чоха Маьп() ( растят Г = пен Гастот () 1пс пвпгаясотяг Ьпс() Гассотяг ГасСотя = Г.Г1погастотя(1000, опт ппвгастотя) Сопяо1е.итатеЬ№пе("Множители числа 1000: Гот(ьпс 1=0; т < ппвгассотяг Ьяя) Сопяо1е.нтЬСя(еастотя(1) Сопяо1е.нтстеъгпя() ) ) При выполнении этой программы получается следующий результат. Множители числа 1000: 2 4 5 8 10 20 25 40 50 100 125 200 250 500 В классе Гассот метод Г1пбрассотя () объявляется следующим образом. рпЬ11с ЬпС() Г1пг(Гястотя(1пС ппв, опт тпт ппв№астотя) ( Обратите внимание на то, как указывается возвращаемый массив типа Ьпг. Этот синтаксис можно обобщить.

Всякий раз, когда метод возвращает массив, он указывается аналогичным образом, но с учетом его типа и размерности. Например, в следующей строке кода объявляется метод яовемеСЬ (), возвращающий двумерный массив типа с(оиЬ1е. риЬ11с сопЬ1е(,) яовенеСЬ() ( !/ Перегрузка методов В С№ допускается совместное использование одного и того же имени двумя или более методами одного и того же класса, при условии, что их параметры объявляются по-разному. В этом случае говорят, что методы иерегружаю)лся, а сам процесс называется перегрузкой мелгодов. Перегрузка методов относится к одному из способов реализации полиморфизма в С№.

В общем, для перегрузки метода достаточно объявить разные его варианты, а об остальном позаботься компилятор. Но при этом необходимо соблюсти следующее важное условие: тип или число параметров у каждого метода должны быть разными. Совершенно недостаточно, чтобы два метода отличались только типами возвращаемых значений.

Они должны также отличаться типами или числом своих параметров. (Во всяком случае, типы возвращаемых значений дают недостаточно сведений компилятору С№, чтобы решить, какой именно метод следует использовать.) Разумеется, перегружаемые методы могут отличаться и типами возвращаемых значений. Когда вызывается перегружаемый метод, то выполняется тот его вариант, параметры которого соответствуют (по типу и числу) передаваемым аргументам.

236 Часть (. Язык С() Ниже приведен простой пример, демонстрирующий перегрузку методов. Продемонстрировать перегрузку методов. оя1пд Вуягепн с1аяя Очег1оаб ( рцЬ1гс чогб Оч10еио() ( Сопяо1е.нгггепапе("Вез параметров" ); Перегрузка метода Оч10еио с одним целочисленньяя параметром. рцЬ11с чогб Оч10еио(1пС а) ( Сопяо1е.Хгбсе51пе("Один параметр. "" + а); ) // Перегрузка метода Оч10еио с двумя целочисленными параметрами. росзгс гпС Оч10езо(ьпС а, гпг Ь) ( Сопяо1е.нг1геаьпе("Пва параметра: " + а + " " + Ь)г гесцгп а + Ьг ) // Перегрузка метода Оч10еио с двумя параметрами типа бооЬ1е. рцЬ11с боцЬ1е Оч10езо(боцЬ1е а, боцЬ1е Ь) ( Сопяо1е.нгсгесспе("Лва параметра типа бопЬ1е: а е " тв Ь): гесцгп а + Ь; ) ) с1аяя Очег1оабОеыо ( ясасьс чогб Мабп() ( Очег1оаб оЬ = пен Очег1оаб()г гпг гея1; боцЪ1е геяО; // Вызвать все варианты метода Оч10езо() оЬ.

Оч10епю () ) Сопво1е.нгггеьвпе (); оЬ.Оч10еио(2)г Сопяо1е.нггСевьпе()г гея1 = оЬ.Оч10емо(4, б)) Сопяо1е.нгтгев1пе("Результат вызова метода оЬ.Оч10ето(4, б): " + гев1 Сопво1е.Хг1геььпе(); геяО = оЬ.Оч10еио(1.1, 2.32); Сопяо1е.нг1Се11пе("Результат вызова метода оЬ.Оч10епю (1.1, 2.32): гено)г ) Вот к какому результату приводит выполнение приведенного выше кода. Гдова 8. Подробнее о методах и массах 237 Без параметров Один параметр: 2 Два параметра: -4 б Результат вызова метода оЬ.Оч1Оево(4, б): 10 Два параметра типа бооЬ1е: 1.1 2.32 Результат вызова метода оЬ.Оч1Оево(1.1, 2.32): 3.42 Как видите, метод Оч1Оево (] перегружается четыре раза. Первый его вариант не получает параметров, второй получает один целочисленный параметр, третий — два целочисленных параметра, а четвертый — два параметра типа 4(ооЬ1е.

Обратите также внимание на то, что два первых варианта метода Оч1Рево () возвращают значение типа чодс(, а по существу, не возвращают никакого значения, а два других — возвращают конкретное значение. И это совершенно допустимо, но, как пояснялось выше, тип возвращаемого значения не играет никакой роли для перегрузки метода. Следовательно, попытка использовать два разных (по типу возвращаемого значения) варианта метода Оч1Оево () в приведенном ниже фрагменте кода приведет к ошибке. Одно объявление метода Оч1Оево(гпс) вполне допустимо. рпЫгс чогб Оч1Оево(гпс а) ( Сопяо1е.иггсеЬ1пе("Один параметр: " + а); ) /* Ошибка! Два объявления метода Оч1оево(1пл) не допускаются, хотя они и возвращают разнотипные значения.

*/ ровьгс гпс Оч1Оево(гпс а) ( сопяо1е.иг1геьгпе("Один параметр: " + а)г гегогп а * а; ) Как следует из комментариев к приведенному выше коду, отличий в типах значений, возвращаемых обоими вариантами метода Оч1Оево (), оказывается недостаточно для перегрузки данного метода. И как пояснялось в главе 3, в Сх предусмотрен ряд неявных (т.е.

автоматических) преобразований типов. Эти преобразования распространяются также на параметры перегружаемых методов. В качестве примера рассмотрим следующую программу. УУ Неявные преобразования типов могут повлиять на решение перегружать метод. оя1по Зуясев) с1аяя Очег1оаб2 ( роЬ1го чогб МуМеГЬ(1пя х) ( Сопяо1е.нггсеьгпе("В методе Мунесл(гпо): " + х); ) роЬ11с чогб МуМеял(бооЫе х) ( сопяо1е.игггеЫпе("В методе мумегь(бооЬ1е): " + х)1 238 Часть!. Язык С() с1аяя туреоопт ( ясасьс тодд Ма1п () ( Отег1оад2 оЬ = пен Отег1оад2() гпс 1 = 10; допЬ1е д = 10.1г Ьуге Ь = 99; яьогс я = 10) Г1оаг Г = 11.5уг оЬ.МумеГЬ(1)г // вызвать метод оЬ.МумеГЬ(гпс) оЬ.Мумесь(д)г // вызвать метод оЬ.мумеГЬ(дооь1е) // вызвать метод оЬ . Мумесь (гпщ — с преобразованием типа // вызвать метод оЬ.Мумесь(гпс) — с преобразованием типа // вызвать метод оЬ.МумеГЬ(допЬ1е) — с преобразованием типа оЬ.МуМеГЬ(Ы г оЬ.МуМесь(я)г оЬ.МуМесь(Г); ) ) При выполнении этой программы получается следующий результат.

Мумесь(1пг): 10 Мунесь(д Ые): 10.1 Мумегь(гпс): 99 МумеГЬ(гпс): 10 Мумесь(донЬ1е): 11.5 В методе В методе В методе В методе В методе // Добавить метод Мумегь(ьуге) оягпч ЗуясезГ с1аяя Отег1оад2 ( роЫ1с тоьд Мунесь(ьусе х) сопяо1е.игггеьгпе("В методе мумегь(ъуге): " + х); ) роЫьс тогд Мумесь(ьпс х) ( сопяо1е.хгьгеьгпе("В методе мумегь(гпг): " + х); роЬ11с то1д Мумесь(дооЬ1е х) ( В данном примере определены только два варианта метода Муне СЬ ( ): с параметром типа Тпг и с параметром типа допЬ1е. Тем не менее методу Мумесь () можно передать значение типа ьуге, яьогс или ()бас. Так, если этому методу передается значение типа Ьуге или зьогг, то компилятор СЗ автоматически преобразует это значение в тип ьпс и в итоге вызывается вариант мумесь (Ьпс) данного метода. А если ему передается значение типа (1оас, то оно преобразуется в тип допЬ1е и в результате вызывается вариант Мумегь (допЬ1е) данного метода.

Следует, однако, иметь в виду, что неявные преобразования типов выполняются лишь в том случае, если отсутствует точное соответствие типов параметра и аргумента. В качестве примера ниже приведена чуть измененная версия предыдущей программы, в которую добавлен вариант метода муме сь ( ), где указывается параметр типа Ьусе. Глава 8. Подробнее о методах и классах 239 Сопяо1е.нгьсегдпе("В методе Мунесп(допЬ1е): " т х); с1аяя туресопы ( ясас1с то1б Маьп() ( Отег1оад2 оЬ = пеи Отег1оаб2() тпг 1 = 10; бопбте б = 10.1; Ьуге Ь = 99; япогг я = 10; 11оас Г = 11.5Г; оЬ.Мумесп(1); // вызвать метод оЬ.МумеГЬ(ьпс) оЬ.МунеГЬ(б); // вызвать метод оЬ.МумеГП(боиЬ1е) оЬ.МумеГЬ(Ь); // вызвать метод аЬ.Мумесп(Ьуге) // на зтот раз без преобразования типа оЬ.МуМесп(я); // вызвать метод оЬ.МуМеГЬ(1пс) -- с преобразованием типа оЬ.МуМесп(Г); // вызвать метод оЬ.МуМесп(г)опЬ1е) -- с преобразованием типа Выполнение этой программы приводит к следующему результату.

В методе Мумесп(гпг): 10 В методе Мунесп(бопЪ1е): 10.1 В методе Мунесп(Ьусе): 99 В методе Мунесп(1пс): 10 В методе Муиегп(боиЬ1е): 11.5 В этой программе присутствует вариант метода МуиегЬ (), принимающий аргумент типа Ьусе, поэтому при вызове данного метода с аргументом типа Ьуге выбирается его вариант Мунегп (Ьуге) без автоматического преобразования в тип 1пг. Оба модификатора параметров, гег и оос, также учитываются, когда принимается решение о перегрузке метода. В качестве примера ниже приведен фрагмент кода, в котором определяются два совершенно разных метода.

рсЬ11с тото МуМесп(ьпс х) ( Сопяо1е.нгьсеЬгпе("В методе МуМеГЬ(1пя): " + х)) ) рсЬ11с тотб Мунесп(гет 1пс х) ( Сопяо1е.ХгьтеЬьпе("В методе Мумесс(гет тпг): " + х); ) Следовательно, при обращении оЬ.Мумесп(1) вызывается метод МуМеСЬ (упг х), но при обращении оЬ.Мунесп(гет 1) вызывается метод нунесЬ(гег 1пг х) . 240 Часть!. Язык С№ Несмотря на то что модификаторы параметров пег и опс учитываются, когда принимается решение о перегрузке метода, отличие между ними не столь существенно.

Например, два следующих варианта метода МуиеСЬ () оказываются недействительными. /! Неверно! роЬ11о чогп Мунепп(оно ьпп х) ( роЫ1с чо1П Мунегь(гес гпп х) ( В данном случае компилятор не в состоянии различить два варианта одного и того же метода МуМеГЬ () только на основании того, что в одном из них используется параметр оос, а в другом — параметр гей. Перегрузка методов поддерживает свойство полиморфизма, поскольку именно таким способом в С() реализуется главный принцип полиморфизма: один интерфейс— множество методов.

Характеристики

Тип файла
DJVU-файл
Размер
7,66 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6552
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее