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

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 45

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

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

Но в любом случае параметр тина рагащэ должен быть единственным. Возврат обьектов из методов Метод может возвратить данные любого типа, в том числе и тип класса. Ниже в качестве примера приведен вариант класса пест, содержащий метод ЕЬ1агде (), в котором строится прямоугольник с теми же сторонами, что и у вызываютцего объекта прямоугольника, но пропорционально увеличенными на указанный коэффициент. 224 Часть (, Язык С» // Возвратить объект из метода.

цвапд Яуягешт с1авв Весг ( 1пг избгпт апС Ье1дпгт рцЫкс Весг(1пг и, апС Ы ( н1оСЬ = н) Ье1дпс = Ь) ) роыас апг Лгеа() ( гегцгп инбСП * Ье1дпгт ) рцЬ11с чоыб Ясон() ( Сопяо1е.ыг1Сес1пе(нгбСЬ + " " ь Ье1дьс)т ) /* Метод возвращает прямоугольник со сторонами, пропорционально увеличенными на указанный коэффициент по сравнению с вызывающим объектом прямоугольника. */ рцЫзс аесС Еп1агде(1пС гасгог) ( гегцгп пен аесг(набСП * Яасгог, Ье»ЯЬС * Гасгог)) ) ) с1аяя ПеСОЬЗ ( вгагас чогб Мако() ( аесг г1 = пен Весг(4, 5) Сопво1е.Иг1Се("Размеры прямоугольника г1: "); г'.Япон(); Сопяо1е.нгагеьзпе("Площадь прямоугольника г1: " + г1.агеа())т Сопяо1е.нгагепфпе()) // Создать прямоугольник в два раза больший // прямоугольника г1.

Весг г2 = г1.Еп1агде(2)) Сопво1е.Итаке("Размеры прямоугольника г2: "); г2.ЯЬон() т Сопво1е.нг1Сен»пе("Площадь прямоугольника г2: г2.агеа())т Выполнение этой программы дает следующий результат: Размеры прямоугольника г1: 4 5 Плошадь прямоугольника г1: 20 Глава 8. Подробнее о методах н классах 225 Размеры прямоугольника г2: 8 10 Площадь прямоугольника г2: 80 Когда метод возвращает объект, последний продолжает существовать до тех пор, пока не останется ссылок на него. После этого он подлежит сборке как "мусор".

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

В подобных случаях для построения объектов используется фабрика класса. Обратимся к простому примеру. // Использовать фабрику класса. няьпд Буягещт с1аяя МуС1аяя ( 1пг а, Ьт // закрытые члены класса // Создать фабрику для класса МуС1аяя. ровъъс МуС1аяв Расгогу(тпг 1, ьпг б) ( МуС1аяя С = ПЕн МуС1аяя () т с.а = 1) с.ь = бт гегнгп Гт // возвратить объект ) роЬ1хс чофа БЛои() ( сопяо1е.игфсеь).пе("а и ь: " ь а ь " " + ь)т ) ) с1аяя махеоьбессв ( ягагъс чотб Матп() ( МуС1аяя оЬ = пен МуС1аяя()т 1пс 1, бт // Сформировать объекты, используя фабрику класса.

тот(1=0, 0=10) х < 10) 1++, б — ) ( мус1аяя апоглегоь = оь.гассогу(1, б)т // создать объект апогпегОЬ.БЛон П ' 1 Сопяо1е.нг1ге11пе()) Вот к какому результату приводит выполнение этого кода: 226 Часть (. йзык С№ а и Ь: 0 10 аиЬ: 1 9 аиЬ:28 аиЬ". 37 аиЬ:46 аиЬ: 55 аиЬ: 64 аиЬ: 73 аиЬ: 82 аиЬ: 91 Рассмотрим данный пример более подробно. В этом примере конструктор для класса МуС1азз ие определяется, и поэтому доступен только конструктор, вызываемый по умолчанию. Это означает, что значения переменных а и Ь нельзя задать с помощью конструктора.

Но в фабрике класса расходу () можно создать объекты, в которых задаются значения переменных а и Ь. Более того, переменные а и Ь являются закрытыми, и поэтому их значения могут быть заданы только с помощью фабрики класса рассолу () .

В методе Маьп.() получается экземпляр объекта класса муС1ааз, а его фабричный метод используется в цикле тсг для создания десяти других объектов. Ниже приведена строка кода, в которой создаются эти объекты. Му01ава апогпегОЬ = оЬ.Гаспогу(1, 3)7 // создать объект На каждом шаге итерации цикла создается переменная ссылки иа объект апосьегоь, которой присваивается ссылка иа объект, формируемый фабрикой класса. По завершении каждого шага итерации цикла переменная апсспегОЬ выходит за пределы области своего действия, а объект, иа который оиа ссылается, утилизируется.

Возврат массива из метода В языке С№ массивы реализованы в виде объектов, а зто означает, что метод может также возвратить массив. (В этом отношении С№ отличается от С++, где ие допускается возврат массивов из методов.) В качестве примера ниже приведена программа, в которой метод Г№пбрассогз (] возвращает массив, содержащий множители переданного ему аргу меита. // Возвратить массив из метода. паьпч зувпеи7 с1ава распоп ( /* Метод возвращает массив таста, содержааий множители аргумента ппи. При возврате из метода параметр ппжтаспога типа опт будет содержать количество обнаруженных множителей. */ рпьтьс ьпт[) Г1пбГасСОГа(ьпС ппи, опт 1пп ппигасгогв) ( ьпп[] Гаева = пен ьпт[80]; // размер массива 80 // выбран произвольно ьпс 1 34 // Найти множители и поместить их в массив Свеса.

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

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

Перегрузка методов относится к одним из способов реализации полиморфизма в С№. В общем, для перегрузки метода достаточно объявить разные его варианты, а об остальном позаботится компилятор. Но при этом необходимо соблюсти следуюшее важное условие: тип или число параметров у каждого метода должны быть разными. Совершенно недостаточно, чтобы два метода отличались только типами возвращаемых значений. Они должны также отличаться типами или числом своих параметров. (Во всяком случае, типы возврашаемых значений дают недостаточно сведений компилятору С№, 228 Часть!, язык Сз чтобы решить, какой именно метод следует использовать.) Разумеется, перегружаемые методы могут отличаться и типами возвращаемых значений.

Когда вызывается перегружаемый метод, то выполняется тот его вариант, параметры которого соответствуют (по типу и числу) передаваемым аргументам. Ниже приведен простой пример, демонстрирующий перегрузку методов. // Продемонстрировать перегрузку методов. ояьпд зуягепп с1аяя Очег1оао ( роь11с чо1«( Оч1пеео() ( Сопяо1е.иг1сеньпе("Вез параметров"); ) // Перегрузка метода Оч1пеео с одним // целочисленным параметром. рпвзьс чоки Оч1пеео(тпс а) ( сопяо1е.игггеьапе("Один параметр: " + а) ) // Перегрузка метода Оч1пеео с двумя // целочисленными параметрами. рцЬ11с гпс Оч1пеео(ьпс а, ьпс Ы ( сопяо1е.иг1гепвпе("два параметра: " + а + " " + ы ) гесцгп а + Ьг ) // Перегрузка метода Оч1пеео с двумя // параметрами типа СоцЬ1е.

рцЬ11с Сопвте Оч1пеео(«(опЪ1е а, «)ооЬ1е Ы ( Сопяо1е.нг1сенапе("два параметра типа «)ооЬ1е: а+' геЫ; гепцгп а ь Ь; ) с1аяя Очег1оак)пеео ( ягагьс чоки маап() ( Очег1оас оЬ = пен Очег1оак(()к ьпс гея1; Сопв1е геяп; // Вызвать все варианты метода Оч1пеео(). оЬ.Оч1Реео(); Сопяо1е.нгасеввпе()) оп.оч1пеио(2)к Сопяо1е.нггпеьзпе()к гея1 = оЬ.Оч10еео(4, 6); Сопяо1е.

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

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

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

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

овьпд Бувгегн В данном примере определены только два варианта метода мумесь(); с параметром типа гпг и с параметром типа бопЫе. Тем не менее методу МуМеСЬ() можно передать значение типа Ьусе, зпогс или г1оас. Так, если этому методу передается значение типа Ьуее или эпоге, то компилятор С№ автоматически преобразует это значение в тип Впг и в итоге вызывается вариант мумесь (1пс) данного метода.

А если ему передается значение типа г1оас, то оно преобразуется в тип с)оиЫе и в результате вызывается вариант МумеСЬ(бооЫе) данного метода. Следует, однако, иметь в виду, что неявные преобразования типов выполняются лишь в том случае, если отсутствует точное соответствие типов параметра и аргумента. В качестве примера ниже приведена немного переделанная версия предыдущей программы, в которую добавлен вариант метода мумесь (), где указывается параметр типа ьусе.

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

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

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

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее