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

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

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

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

Точно тэк же, как перегружаются методы, можно перегружать операции, подобные +, —. * и тд. В дополнение к перегрузке арифметических операций имеется возможность также создавать собственные операции для преобразования от одного типа к другому. Можно перегружать и другие операции, позволяя использовать объекты в булевских выражениях проверки.

Можете — не значит должны Перегрузка операций может сделать использование некоторых классов и структур более естественным. Однако перегрузка операций, выполненная неаккуратно, может значительно ухудшить читабельность кода и снизить возможность его понимания. Вы должны быть внимательными, рассматривая семантику операций с типами. Не вводите того, что трудно будет расшифровать. Всегда ориентируйтесь на создание более читабельного кода — и не только для того счастливчика, который будет хлопать глазами, изучая ваш код, но также и для себя. Случалось ли вам когда-нибудь смотреть на код и думать: "Кто в здравом уме мог написать такую чушью", а впоследствии обнаружить, что это были вы сами? Такое бывает чаще, чем может показаться.

Еще одна причина не перегружать операции заключается в том, что это не поддерживается в языках .НЕТ, не являющихся частью системы С1Л. От языков, ориентированных на СЕЕ не требуется поддержка перегруженных операций. Так, например Чгзпа1 Ваз!с 2005 был первой .НЕТ-версией языка. поддерживающей перегрузку операций. Поэтому важно, чтобы перегруженные операции были синтаксическими сокращениями для функциональности, предоставляемой другими методами, которые выполняют те же операции и которые можно вызывать в коде на других С18-совместимых языках.

Фактически, рекомендуется проектировать типы так, как если бы перегруженные операции не существовали. Тогда позже при желании их можно будет добавить, просто вызывая существующие методы с тем же семантическим назначением. Типы и форматы перегруженных операций Перегруженные операции определяются как общедоступные статические методы в классах, для расширения которых они предназначены. В зависимости от типа перегружаемой операции, такие методы могут принимать один нли два параметра, и всегда возвращают значение.

Для всех операций за исключением операций преобразования, типом одного из параметров должен быть тип включающего метод класса. Например, не имеет смысла перегружать операцию з в классе Сотр1ех, если он будет складывать вместе два значения с1ооЬ1е. К тому же, как вы вскоре убедитесь, это даже невозможно. 176 Глава 6 Типичная операция э для класса Сошр1ех может выглядеть так: рпЬ1тс ятвт1с Сошр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е гпя ) ( // Метод не делает ничего; создан только лля примера.

тесптп тпяг При попытке скомпилировать приведенный выше код будет получено следующее сообщение об ошибке: еттот СБ0553: Опе об Гпе рвтвиететя от" в Ьтпвту оретвтот шпят Ье Гье соптвтп1по Суре ошибка С$0563г Олин из параметров бинарной операции должен иметь вклвчваиий тип Перегрузка операций 177 Операции не должны изменять свои операнды Как уже известно, методы операций являются статическими.

Поэтому настоятельно рекомендуется (читатгк требуется) не изменять передаваемые им параметры. Вместо этого необходимо создавать новый экземпляр возвращаемого типа и возвращать его в качестве результата операции. Неизменяемые структуры и классы вроде Эуэгегл. Зтгьпд — блестящие кандидаты для реализации пользовательских операций. Такое поведение естественно для булевских операций, которые обычно возвращают тип, отличающийся от переданных типов. На заметку! "Минуточкуà — скажут некоторые из вас, принадлежащие к сообществу С++, — "а как же тогда реализовать постфиксные и префиксные операции ++ и -- без изменения операнда?'1 Все операции Са являются статическими, и к ним относятся также и постфиксные, и префиксные операции, в то время как в С++ они представлены методами экземпляров, модифицирующими экземпляр объекта через указатель сьвэ.

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

Это еще одна причина того, что операции могут возвращать новые экземпляры, никогда не модифицируя состояния самих операндов. Если вы не будете следовать такой практике, то обречете себя на некоторые серьезные неприятности во время отладки. Имеет ли значение порядок параметров? Предположим, что создается структура для представления простых комплексных чисел, скажем, Сопр1ех.

и требуется складывать вместе экземпляры Соир1ех. Было бы также удобно иметь возможность прибавлять простые значения г(оиЬ1е к экземпляру Соглр1ех. Добавление такой функциональности — не проблема, поскольку можно перегрузить метод операции -; так, чтобы один параметр был Соглр1ех, а другой — с(ооЫе. Это объявление может выглядеть примерно так: эса11с риЫзс Соир1ех орегасог+ ( Соир1ех 1пз, ОоиЫе гпэ При наличии такой операции, объявленной и определенной в структуре Соир1ех, появляется возможность писать код вроде следующего: Сот р1ех срх1 = пен Соир1ех( 1.0, 2.0 Соср1ех срх2 = срх1 + 20.0г Это избавляет от необходимости создавать дополнительный экземпляр сопр1ех, состоящий только из реальной части, равной 20.0,чтобы добавить ее к срх1.Однако предположим, что необходимо иметь возможность менять местами операнды и делать что-нибудь вроде следующего: Соир1ех срх2 = 20.0 + срх1; Поддержка разного порядка следования для операндов различных типов достигается с помощью отдельных перегрузок для операции.

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