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

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

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

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

Хг1сеЬ Сопзо1е.иг1теЬ Сопво1е.игтсеЬ Сопво1е.кгбсеЬ Сопзо1е.кгтсеЬ ( пее Совр1ех( 1.0, 3.0 ); пее Совр1ех( 1.0, 2.0 ); срх1 + срх2; 20.0 + срх1; арх1 + 25.0; Ьпе( "срх1 == (О)", срх1 ); Ьпе( "срх2 == (О)", срх2 ); Ьпе( "срхЗ == (О)", срхЗ ); тпе( "срх4 == (О)", арх4 ); тпе( "арх5 == (О)", срх5 Перегрузка операций 179 Обратите внимание, что, как и рекомензуется, перегруженные методы операции вызывают методы, выполняющие саму операцию. Фактически это существенно упрощает поддержку обоих последовательностей операндов орегасог+ для типа сопр1ех. Совет. При наличии абсолютной уверенности а том, что тип будет использоваться только з среде Са или с языком, поддерживающим перегруженные операции, можно пренебречь этим празилом и просто написать перегруженные операции, Операции, допускающие перегрузку Давайте посмотрим, какие операции можно перегружать. В первую очередь, к ним относятся три главных типа операций — унарные операции, бинарные операции и операции преобразования.

Перечислить здесь все операции преобразования невозможно, поскольку их набор неограничен. Вдобавок можно использовать одну хорошо знакомую тернарную операцию ?: для условных операторов, но перегружать ее напрямую нельзя. Ниже в разделе "Булевские операции" будет показано, как поступить с тернарной операцией. В табл. 6.1 перечислены все перегружаемые операции, за исключением операций преобразования. Таблица 6.1. Унарные и бинарные операции бинарные операции Унарные операции Сгое и га1зе « » ==и!= >и< >=и<= Операции сравнения Бинарные операции сравнения == и ! =, < и >, а также >= и <= должны быть реализованы парами.

Это вполне естественно, поскольку вряд ли возникнет ситуация, когда пользователям разрешено применять, скажем, операцию ==, но не разрешено ! =. Кроме того, если тип позволяет упорядочивание через реализацию интерфейса 1СожрагаЫе или его обобщенного аналога 1СоклрагаЬ1е<Т>, то имеет смысл реализовать все операции сравнения. Их реализация тривиальна, если следовать каноническому руководству, приведенному в главах 4 и 13, соответственно переопределяя Ецоа1з и СегназПСобе 180 Глава 6 и реализуя 1совратаь1е (и.необязательно, 1соврагаь1е<т>).

Учитывая это,перегрузка операций просто требует вызова этих реализаций. Рассмотрим модифицированную форму примера Совр1ех, следующую этому шаблону при реализации всех операций сравнения: иятпд БувСев; риЬ11с вСгисг Совр1ех: 1СоврагаЫе, 1ЕЧиасаЬ1е<Совр1ех>, 1СоврагаЬ1е<Совр1ех> ( риЫТс Совр1ех( боиЫе геа1, боиЫе Свд ) ( СЬтя.геа1 = геа1) СЬ1э ° твс = 1воц ) // Перегрузка Бувкев.ОЬ)есС риЫтс отегггбе Ьоо1 Еоиа1я ( оЬ)ест оСЬег ) Ьоо1 геяи1С = Та1ве; 11( оСЬег тз Совр1ех ) ( геви1С = Ес(иа1я( (Совр1ех) отлет ); ) тегигп геви1С; ) // Версия, безопасная к типам риЫ1с Ьоо1 Еоиа1я( Совр1ех СЬас ) ( теСитп (СЬтв.геа1 == СЬас.геа1 аа СЫв.твс == сбаС.Свд); ) // Должен быть перегружен, если перегружен ОЬ)есС.ЕЧиа1в() риЫТс отеггтбе Спк ОеСНаяЬСобе() ( гекигп (Тпг) СЫв.Мадп1Сибе; ) // Версия, безопасная к типам риЫ1с Тпг СовракеТо( Совр1ех СЬаС ) ( 1пс геяи1С; 1т( Еоиа1я( СЬаС ) ) ( теви1С = 0) ) е1ве тб( СЫя.масптгибе > СЬаг.надптсибе ) ( гези1С = 1; ) е1ве ( геяи1С = -1! ) тегигп геви1га // Реализация 1СовратаЬ1е Тпг 1СовратаЬ|е.СоврагеТо( оЬ)есс оСЬег ) ( 11( ((оСЬег тя Совр1ех) ) ( СЬтон пен АгяивепСЕхсерСТоп( "Неверное сравнение" ); ) геСигп СовракеТо ( (Совр1ех) отлет ) ) // Перегрузка Яувсев.ОЬ)ест риЫтс отегг1бе вггтпд Тозсгтпд() ( гекикп Ясг1пд.рокваС( "((0), (1))", теа1, Свя )) Перегрузка операций 181 рпЫТс бопЫе Мадп1Тобе ( дег ( геготп МаТЬ.БЧТТ( МаТЬ.Рон(ТЬ1в.геа1, 2) МаТЬ.Рон(ТЬ15.1щч, 2) Г/ Перегруженные операции рпЫтс вТаггс Ъоо1 оретагог==( Сощр1ех 1Ьв, Сощр1ех ТЬв ) ( геТогп 1Ьв.ЕЧоа1в( ТЬв ); ) роЬ11с вгатгс Ьоо1 оретаТот!=( Сощр1ех 1пв, Сощр1ех тпв ) ! гетвгп )1пв.ЕЧпа1в( гпв ); роЫРс вгагтс Ьоо1 орегагот<( Сощр1ех 1Ьв, Сощр1ех гпв ) ( гегогп 1Ьв.СощрагеТо( ТЬв ) < 0; ) рпЬ11с втаТ1с Ьоо1 оретагот>( Сощр1ех 1Ьв, Сощр1ех гпв ) ( гегпгп 1Ьв.СотратеТо( ТЬв ) > О; ) роЬ1гс вТаТ1с Ьоо1 орегагог<=( Сощр1ех 1Ьв, Сощр1ех тпв ) ( гегпгп 1Ьв.СощратеТо( тпв ) <= О) ) роЫТс вгаг1с Ьоо1 оретагот>=( Сощр1ех 1Ьв, Сощр1ех тЬв ) гегитп 1Ьв.СоиратеТо( гЬв ) >= 0; !/ Остальные методы опущены для ясности рг1чаге бопЫе теа1; рттчате бооЫе гщд? ! рпЫ1с с1авв ЕпТгуро1пг ( зТагтс чотб Мабп() ( Сощр1ех срх1 = пен Сощр1ех срх2 = пен Сопво1е.игбТеьгпе( Соп1Р1ех ( 1.

О, 3. 0 ); Сощр1ех( 1.0, 2.0 "срх1 = (0), срх1.иачп1тобе = (1)", срх1, срх1.Мадптгобе ); "срх2 = (0), срх2.иадп1Тпбе = (1)1п", срх2, срх2.Мачпйтпбе ); "срх1 == срх2 ? (0)", срх1 == срх2 ); "срх1 )= срх2 ? (0)", срх1 != срх2 ); "срх1 < срх2 ? (0)", срх1 < срх2 ); "срх1 > срх2 ? (0)", срх1 > срх2 ); "срх1 <= срх2 ? (0)", срх1 <= срх2 ); "срх1 >= срх2 ? (0)", срх1 >= срх2 ); Сопво1е.кт1геьтпе( Сопво1е. ХТ1геььпе ( Сопво1е.иг1геьтпе( Сопво1е.итггеЕРпе( Сопво1е.итТТе11пе( Сопво1е.ит1геЬтпе( Сопво1е.итггеь1пе( ) ) ' Эта рекомендация подробно описана в разделе "Явная реализация интерфейса с помощью типа значений" главы 5.

Обратите внимание, что методы операций просто вызывают методы, реализующие Ег)па1в и Сощратето. Кроме того, соблюдается рекомендация о предоставлении версий, безопасных к типам, двух методов через реализацию 1СощратаЬ1е<Сощр1ех> и 1Ег)пагаЫ е< Сощр1ех>, поскольку Сощр1ех — тип значения, и необходимо по возможности избежать упаковки'. Дополнительно явно реализован метод 1 сощра таЬ1е . Сощра те то, который затруднит непреднамеренный вызов пользователями неверной версии 182 Глава 6 (безтиповой). Всякий раз, когда есть возможность, необходимо пользоваться системой контроля типов компилятора, выявляя ошибки на этапе компиляции, а не на этапе выполнения.

Без явной реализации 1согкрагаЫе. Соврагето компилятор спокойно пропустит оператор, в нотором производится попытка сравнения экземпляра АРР1е с экземпляром Согкр1ех. В подобной ситуации должно генерироваться исключение 1пча11бСаэГЕхсергьоп во время выполнения, тан что всегда отдавайте предпочтение ошибкам времени компиляции перед ошибками времени выполнения. Операции преобразования Операции преобразования, как следует из их названия, являются операциями, преобразующими объекты одного типа в объекты другого типа. Операции преобразования могут допускать как неявные, тан и явные преобразования. Неявные преобразования выполняются при простом присваивании, в то время как явные требуют знакомого синтаксиса приведения, где целевой тип указывается в скобках, предшествующих экземпляру, из которого присваивается значение.

На неявные операции накладывается одно важное ограничение. Стандарт С)Г требует, чтобы неявные операции не генерировали исключений и всегда гарантированно завершались успешно, без потери информации. Если соблюсти это требование не удается, то преобразование должно быть явным. Например, при преобразовании одного типа в другой всегда имеется возможность утери информации, если целевой тип не настолько выразительный, нак исходный. Рассмотрим преобразование 1опо в эпохе.

Ясно, что информация может быть утеряна, если значение 1опо окажется больше максимально допустимого для типа эпохе (эпогЫ Махуа1це). Такое преобразование должно быть явным и требовать ог пользователя применения синтаксиса приведения. Теперь предположим, что выполняется противоположное преобразование, те. зпогс в 1опп. Такое преобразование всегда проходит успешно, поэтому оно может быть неявным. На заметку! Выполнение явных преобразований из типа с большим диапазоном хранимых значений в тип с меньшим диапазоном может дать ошибку усечения, если исходное значение окажется слишком большим, чтобы быть представленным в маленьком типе. Например, при выполнении явного приведения 1опо к зпагс можете возникнуть ситуация переполнения.

По умолчанию скомпилированный код будет молча производить усечение. Если скомпилировать код с опцией компилятора /сьесхебч-, то при попытке явного преобразования 1опп к зьогг будет генерироваться исключение Яузгет.счег11онкхсерстоп. Рекомендуется всегда применять опцию г'спесхебч-. Давайте посмотрим, какие операции преобразования должны быть предусмотрены для Сомр1ех. Довольно несложно представить, по крайней мере, один определенный случай — преобразование из боцЬ1е в Сомр1ех. Несомненно, такое преобразование должно быть неявным. Другой вариант — Совр1ех в боцЬ1е — требует явного преобразования. (Поскольку приведение Совр1ех к боцЬ1е все равно не имеет смысла и показано здесь только для примера, в качестве результата этого приведения можно возвращать значение по модулю, а не просто вещественную часть комплексного числа.) Рассмотрим пример реализации операций приведения; из1по Бузсепг рпЬ1тс зсгпсе Сотр1ех рцЫТс Сспр1ех( бопЬ1е геа1, боцЫе Тпадгпагу ) ( Спхэ.геа1 = геа1; Гпгз.пкад1пагу = звэдтпагу; ) Перегрузка операций 183 // Переопределение Буэтещ.ОЬ)ест рцЫтс оуетт1бе зттбпо Тозтт1по О ( ) тетптп Бттз.пд.готщат( "((0), (1))", теа1, ипарз.дату ); РцЫтс боцЫе Маопттцбе ( дет ( тетцть Матп.зг(тт( МатЬ.Ром(ЬЫз.теа1, 2) + МатЬ.Рои(ЬЬтэ.1та 1пэт 2) )з О У ) РцЫтс этэт1с тюр11стт оретэтот Союр1ех( боцЫе б ) ( тетцтп пеы Сотр1ех( б, 0 ) РцЫтс этэт1с ехр11стт оретэтот боцЫе( Сощр1ех с ) ( тетцтп с.Мэ пттцбез ) О // Остальные методы опущены длл ясности.

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

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