Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 37

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 37 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 372019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

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

Это усложняет задачу персонала сопровождения. которому придется следовать за вами и разбираться во всех действиях. Это не значит, что неявные преобразования — плохая вещь при разрешении перегрузки, но лучше использовать их благоразумно и сдержанно, чтобы минимизировать неприятные сюрпризы в будущем.

Начиная с версии С№ 4.0, разрешение перегрузки может генерировать исключения во время выполнения при использовании нового типа г1упав1с. Более подробно тип с1упзи1с рассматривается в главе 17. Необязательные аргументы Проектировщики С№ всегда учитывали список запросов пользователей при разработке новой версии языка. С годами необязательные аргументы методов переместились на вершину этого списка. Но до появления С№ 4.0 не было достаточно веских причин для их добавления к языку.

В духе повышенной возможности взаимодействия в С№ 4.0 появилась концепция необязательных и именованных аргументов (о которых будет сказано в следующем разделе), а также тип буоая1с 1рассматривается в главе 17). Эти три средства значительно расширили возможности взаимодействия между С№ и другими технологиями, такими как СОМ, приблизив язык С№ по уровню взаимодействия к Аг1эца) Ваэ1с. Необязательные аргументы в С№ работают подобно своим аналогам в С++.

В объявлении метода для параметра можно указать значение по умолчанию. Любой параметр, не имеющий значение по умолчанию, рассматривается как обязательный. Из этого следует, что все параметры со значениями по умолчанию должны размещаться в конце списка параметров метода. Рассмотрим следующий пример; Классы, структуры и объекты 137 пятпд Яувгевт с1аяв ТеавиевЬег ( рпЬ1гс ТеавыевЪег( вггапя вггспя яггспс Ьоо1 ТеввМевЬег Рп11каве = Тп11кавет ТТС1е = СгС1е; Теав Сеапц 1вгп11Тсве = Твгп11ТТвет Мяпачег = вяпасег; гп11кяве, СгС1е = Уыпгпоип", сеав = "Япкпсип", Твгп11Тгве = Та1ве, вапаяег = пп11 ) ( ) рпЬ1гс ясгспд Рп113аве ( адепт ргачаге веСт рпЫгс згг1пд ТгС1е ( дег; рггчвге вегт ) рпЬ1гс вггспч Теав ( дег; ргачаге веС; ) рпЫТс Ьос1 1вгп11таве( яес; ргтчвсе вест ) рпЬ1гс ТеавневЬег нападет ( дег~ рггчаге вегт ) згвгас с1авв Епггурсспг ( вгаггс чо1б Ма1п() ( ТеавиевЬег Св = пеи ТеавневЬег( "М11Ссп Хаббавв" )) ) ) еггог СЯ173б: Яегзп1С рагавегег чв1пе гог 'Ссгте' впвг Ье я соврг1е-Саве сопягапС овибкя СЯ1736т Значение параметра по умолчанию для СТС1е дслкно быть константой, сущестзуввей зо время компиляции Именованные аргументы Именованные аргументы — новое средство, которое появилось в СЗ 4.0.

В действительности оно дополняет необязательные аргументы. Рассмотрим пример класса ТеавМевЬег, приведенный в прелы)тущем разделе. Предположим, что необходимо создать экземпляр ТеавневЬег, приняв все аргументы конструктора по умолчанию за исвпочением 1вГп11Т1ве. Для этого можно использовать именованные аргументы, как показано ниже: петля Яувгепц с1аяя ТеввМевЬег ( рпЫгс ТеавМевЬег( яггспд вггтпд яггтпд Ьоо1 ТеавмевЬег гп11наве, СгС1е = Узп)тпоип", Сеяв = Убпхпоип", Твгп11Т1ве = Тя1яе, вяпяяег = пп11 ) ( В этом примере в объявлении конструктора используются необязательные параметры, и, как видно в методе маап, при инициализации экземпляра ТеавневЬег участвуют ассоциированные необязательные аргументы.

Обратите внимание, что все значения параметров по умолчанию являются константами. В качестве значений параметров по умолчанию ничего кроме констант, существующих во время компиляции, указывать не разрешено. В случае нарушения этого правила компилятор выдаст следующее сообщение об ошибке: ! 38 Глава 4 Рс11ваве = Гп11яаае) ТгЫе = Ггп1е; Теав = Геапп 1вуп11Т1ае = Тврс11ТТае; Мападег = тападегп ) рпЫ1с впггпд Рп11иаае ( деп; рггчапе веп; ) рпЫ1с впггпд ТТГ1е ( деп) рг1чапе веп; ) рпЬ11с впг1пд Теав ( деп; ргтчапе веп; ) рсЫТс Ьоо1 1вгп11ТТае( деп; ргтчапе веп) рпЫ1с ТеавМевЬег Мападег ( деп) ргтчапе веп) ) ) впасгс с1авв ЯпсгуРоапп ( впаптс чотс Мвтп() ( Теапиеэпег Ге = пеэ ТеавиевЬег( "Ревет 01ЪЪопв", Твгс11Типе: Ггпе ) ) ) Обратите внимание на способ передачи аргумента Тзрп11ТТае конструктору. Применять именованные аргументы легко. Необходимо просто указать имя аргумента.

за которым следует двоеточие и значение, которое должно быть передано для этого аргумента. Остальные аргументы при вызове конструктора сохраняют свои значения по умолчанию. В приведенном выше вызове конструктора именованные аргументы фактически можно было бы использовать и для передачи значений обязательных аргументов. При этом можно было бы изменить порядок аргументов в списке вызова: впап1с чоьп Маап() ( Теапиевпег Гв = пеэ ТеаэиевЬег( Твгп11Тппе: Ггое, Гп11вате: "Ревет 61ЬЬопв" ) Именованные аргументы оказывают незначительное влияние на перегрузку методов. Позиционный список аргументов конструируется за счет комбинирования заданных позиционных аргументов вместе с именованными аргументами и всеми применимыми аргументами по умолчанию.

Как только позиционный список аргументов сконструирован, разрешение перегрузок выполняется нормально. Единственное место, где именованные аргументы представляют сложность — это виртуальные переопределения. рассмотрим следующий надуманный пример: ив)пд Яувпепц с1авв й роЫТс ч1гппа1 чогб ЬЬЯовеГЫпд( гпп х, Тпп у ) ( Сопво1е.кг( Ге) 5 пе ( "( О ), (1) ", х, у ) ) ) ) с1авв В: й ( рпЫгс очегггбе чо1с' ЬоЯоаеГЫпд( Тпп у, Тпп х ) ( Ьаве.РоЯовеппапд( у, х )и ) Классы, структуры н объекты 139 зкзкас с1азз ЕпкгуРоъпк ( зкак1с чо10 Маап () ( В Ь = пен В() т Ь,РоЯовекъапд( х: 1. У: 2 ): А з = Ьт з.соэовекпапд( х: 1, у: 2 ); Это совершенно экстремальный пример.

и поступать подобным образом в реальной разработке ни в коем случае нельзя! Эапуск на выполнение приведенного выше кода дает следующий вывод: 2, 1 1, 2 При переопределении виртуального метода в типе-наследнике должно выполняться единственное требование — соответствие типов параметров и их позиций объявлению базового метода. Как было показано выше, действительные имена аргументов могут измениться. Проблема в том.

что компилятор должен иметь надежную методику отображения именованного аргумента на позиционный аргумент виртуального метода. Он делает это, исполъзуя объявление метода статического типа переменной-ссылки. В приведенном выше примере две ссылки а и Ь ссылаются на один и тот же экземплар В.

Однако при вызове РояовесЬТпс с именованными аргументами имеет значение объявление Рояовесь1пд, ассоциированное со статическим типом соответствующей ссылки. В первом вызове Рояовесптпд через переменную ь, поскольку ее статическим типом является В, именованные аргументы разрешаются на основе определения В. Розовекптпс. Но в следующем вызове РозовеСЬ1пс через переменную а, из-за того, что ее статическим типом является А.

именованные аргументы разрешаются через обращение к определению А. РозовеСЬ1пд. Как видите, этого следует избегать любой ценой. поскольку оно определенно вносит некоторую излишнюю путаницу в код. И, наконец, следует учесть еще один момент: когда в списке аргументов присутствуют выражения, они вычисляются в том порядке, в котором появляются в списке, даже если этот список отличается от порядка позиционных параметров вызываемого метода.

Взгляните на следующий пример: пэтпо Яузтевт с1аэз А ( риЬ11с гоаб РоЯовеккапч( Тпк х, тпк у ) Сопэо1е.иг)сеъапе( "(О), (1)", х, у ) ) зтакас с1азз Ептгурогпт ( зкзсас ноас( Маап() ( А з = пен А()! а.Розовеквапд( сепегзтеуа1ие1(), Сепегзсеуа1ие2() // Теперь используем именованные аргументы а.оозовеккупд( у ." Яепегзкеуа1пэ2(), х: Бепегасеуз1пе1() )т ) эгзтъс Тпс Яепегзкеуз1пе1 О ( Сопэо1е.ыгъсеьъпе( "Вызов СепегзсеЧз1пе1" ) гетзгп 1; 140 Глава л зсасгс зпс Вепегэсеуа1ие2 О ( Сопзо1е.иг1сеь1пе( "Вызов Вепегзсеуа1ие2" гесигп 2г ) ) В результате запуска на выполнение приведенного выше кода получается следующий вывод: Вызов сепегэгеуа1пе1 Вызов сепегасеуа1ие2 1, 2 Вызов 6епегзсеуа1ие2 Вызов Йепегасеуа1ие1 1, 2 Обратите внимание, что порядок вызова методов Бепе гасеуа1ие1 и Бепегагеуа1се2 зависит от порядка, в котором они появляются в списке аргументов, независимо от того, с какими позиционными параметрами они ассоциированы.

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

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

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

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7056
Авторов
на СтудИзбе
258
Средний доход
с одного платного файла
Обучение Подробнее