Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Какие операции можно перегружать.
Перегружать можно не все доступные операции. Те из них, которые перегружать можно, перечислены в табл. 7.6. Таблица 7.6. Операции, которые разрешено перегружать
Пользовательские приведения Ранее в этой главе рассматривалось, как преобразовывать значения между предопределенными типами данных. Вы видели, что это делается посредством приведения. Также было показано, что C# позволяет выполнять приведения двух видов: явные и неявные. В этом разделе такие типы приведения рассматриваются более подробно. При явном приведении вы явно обозначаете приведение в коде, указывая в скобках тип, к которому нужно привести: int i = 3; long l = I; // неявное short s = (short)i; // явное Для предопределенных типов данных явные приведения требуются тогда, когда возникает риск потери данных вследствие приведения. Ниже перечислено несколько примеров. - При преобразовании int в short, потому что размер short недостаточен для сохранения значения int. - При преобразовании типов данных со знаком в беззнаковые может быть получен неверный результат, если переменная со знаком содержит отрицательное значение. - При преобразовании типов с плавающей точкой в целые дробная часть теряется. - При преобразовании из типа, допускающего null-значения, в тип, не допускающий null, если исходная переменная содержит null, то генерируется исключение. Дело в том, что, требуя явного приведения в коде, C# заставляет вас подтвердить, что вы понимаете степень риска потери данных, а потому при написании кода принимаете это во внимание.
Поскольку C# позволяет определять собственные типы данных (структуры и классы), это значит, что вам понадобятся средства поддержки приведения к этим типам и из них. Механизм заключается в том, что вы можете определить приведение как операцию-член одного из классов. Операция приведения должна быть помечена либо как implicit, либо как explicit, чтобы указать, каким образом ее предполагается использовать. Ожидается, что вы будете следовать тем же рекомендациям, что и в случае предопределенных приведений: если уверены, что данное приведение всегда безопасно независимо от значения исходной переменной, то определяете его как implicit (неявное). Однако когда извести но, что существует опасность, когда при определенных значениях что-то может пойти не так - возможно, потеряются данные или сгенерируется исключение - в таком случае приведение должно быть определено как explicit (явное). Вы должны объявлять любое пользовательское приведение как явное, если могут существовать такие исходные значения, для которых оно завершится аварийно, либо есть риск возникновения исключений. Синтаксис определения приведения подобен синтаксису перегруженных операций, который вы уже видели в настоящей главе. И это не случайно, потому что приведение рассматривается как операция, эффект применения которой состоит в преобразовании исходного типа в целевой. Чтобы проиллюстрировать синтаксис, рассмотрим фрагмент из примера структуры Currency, которая будет представлена ниже: public static implicit operator float (Currency value) { // код обработки } Возвращаемый тип операции определяет целевой тип операции приведения, а единственный параметр - исходный объект, подвергающийся преобразованию. Показанное здесь приведение позволяет неявно преобразовывать значение Currency в float. Обратите внимание, что если бы приведение было объявлено как explicit, то компилятор разрешал бы только явное его использование. Как и другие перегруженные операции, приведения должны быть объявлены как public и static. Разработчики на C++ отметят, что в этом язык C# отличается от C++, где приведения являются членами экземпляров классов.
|
||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-12-30; просмотров: 151; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.20.57 (0.004 с.) |