Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Checked и unchecked 8 страница





bool operator ==(decimal x, decimal y);

bool operator!=(decimal x, decimal y);

bool operator <(decimal x, decimal y);

bool operator >(decimal x, decimal y);

bool operator <=(decimal x, decimal y);

bool operator >=(decimal x, decimal y);

Каждый из этих операторов сравнивает числовые значения двух десятичных операндов и возвращает значение bool, которое указывает, является ли соответствующее отношение истинным или ложным. Каждый оператор сравнения десятичных чисел эквивалентен соответствующему оператору отношения или равенства типа System.Decimal.

7.10.4 Логические операторы равенства

К стандартным логическим операторам равенства относятся:

bool operator ==(bool x, bool y);

bool operator!=(bool x, bool y);

Результат == равен true, если оба значения x и y имеют значение true или оба имеют значение false. Иначе результат равен false.

Результат!== равен false, если оба значения x и y имеют значение true или оба имеют значение false. В противном случае результат равен true. Если операнды имеют тип bool, оператор!= дает такой же результат, как и оператор ^.

7.10.5 Операторы сравнения значений перечисления

Каждый тип перечисления неявно предоставляет следующие стандартные операторы сравнения:

bool operator ==(E x, E y);

bool operator!=(E x, E y);

bool operator <(E x, E y);

bool operator >(E x, E y);

bool operator <=(E x, E y);

bool operator >=(E x, E y);

Результат вычисления x op y, где x и y являются выражениями с типом перечисления E базового типа U, а op является одним из операторов сравнения, в точности равен значению ((U)x) op ((U)y). Другими словами, операторы сравнения значений типа перечисления просто сравнивают базовые целые значения двух операндов.

7.10.6 Операторы равенства значений ссылочного типа

К стандартным операторам равенства значений ссылочного типа относятся:

bool operator ==(object x, object y);

bool operator!=(object x, object y);

Операторы возвращают результат сравнения двух ссылок на идентичность.

Поскольку стандартные операторы равенства значений ссылочного типа принимают операнды типов object, они применимы ко всем типам, в которых не объявляются применимые члены operator == и operator!=. И наоборот, любые применимые пользовательские операторы равенства скрывают стандартные операторы равенства значений ссылочного типа.

Для стандартных операторов равенства значений ссылочного типа должно выполняться одно из следующих условий.

· Оба операнда являются значениями типа, известного как ссылочный, или литералом null. Кроме того, из типа одного операнда в тип другого существует стандартное неявное преобразование (§6.2.4).

· Один операнд имеет значение типа T, где T является параметром_типа, а второй операнд является литералом null. Кроме того, у T нет ограничений типа значения.

Если не выполняется какое-либо из этих требований, возникает ошибка времени привязки. Основные следствия из этих правил таковы.

· Если известно, что во время привязки две ссылки отличаются, то использование стандартных операторов равенства значений ссылочного типа для их сравнения вызывает ошибку времени привязки. Например, если типы операндов во время привязки — это типы классов A и B и если ни A, ни B не является производным от другого класса, то эти два операнда не смогут ссылаться на один объект. Следовательно, операция вызовет ошибку времени привязки.

· Стандартные операторы равенства значений ссылочного типа не позволяют сравнивать операнды с типом значения. Поэтому нельзя сравнивать значения типа структуры, если только в этом типе не объявляются собственные операторы сравнения.

· Стандартные операторы равенства значений ссылочного типа никогда не вызывают выполнение операций упаковки для своих операндов. Выполнение таких операций упаковки будет бессмысленным, поскольку ссылки на создаваемые упакованные экземпляры обязательно будут отличаться от всех остальных ссылок.

· Если операнд с типом параметра типа T сравнивается со значением null и тип T во время выполнения является типом значения, то результат сравнения равен false.

В следующем примере проверяется, имеет ли аргумент типа параметра типа без ограничений значение null.

class C<T>
{
void F(T x) {
if (x == null) throw new ArgumentNullException();
...
}
}

Конструкция x == null разрешена, даже если T может представлять тип значения, и результат просто равен false, когда T имеет тип значения.

Для операции вида x == y или x!= y если существует применимый operator == или operator!=, то по правилам разрешения перегрузки операторов (§7.3.4) будет выбран этот оператор вместо стандартного оператора равенства значений ссылочного типа. Однако всегда можно выбрать стандартный оператор равенства значений ссылочного типа, выполнив явное приведение одного или обоих операндов к типу object. В примере

using System;

class Test
{
static void Main() {
string s = "Test";
string t = string.Copy(s);
Console.WriteLine(s == t);
Console.WriteLine((object)s == t);
Console.WriteLine(s == (object)t);
Console.WriteLine((object)s == (object)t);
}
}

дает в результате

True
False
False
False

Переменные s и t относятся к разным экземплярам string, содержащим одинаковые символы Первое сравнение дает значение True, потому что когда оба операнда имеют тип string выбирается стандартный оператор равенства значений ссылочного типа (§7.10.7). В оставшихся операциях сравнения получается значение False, потому что когда один или оба операнда имеют тип object, выбирается стандартный оператор равенства значений ссылочного типа.

Обратите внимание, что указанная процедура не применима для типов значения. В примере

class Test
{
static void Main() {
int i = 123;
int j = 123;
System.Console.WriteLine((object)i == (object)j);
}
}

выдается результат False, потому что при приведении типов создаются ссылки на два разных экземпляра упакованных значений int.

7.10.7 Операторы равенства строк

К стандартным операторам равенства строк относятся:

bool operator ==(string x, string y);

bool operator!=(string x, string y);

Два значения типа string считаются равными, когда истинно одно из следующих условий:

· оба значения равны null;

· оба значения являются непустыми ссылками на экземпляры строк с одинаковой длиной и идентичными символами в каждой позиции.







Дата добавления: 2015-09-07; просмотров: 449. Нарушение авторских прав; Мы поможем в написании вашей работы!




Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Выработка навыка зеркального письма (динамический стереотип) Цель работы: Проследить особенности образования любого навыка (динамического стереотипа) на примере выработки навыка зеркального письма...

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

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

Менадиона натрия бисульфит (Викасол) Групповая принадлежность •Синтетический аналог витамина K, жирорастворимый, коагулянт...

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

Дренирование желчных протоков Показаниями к дренированию желчных протоков являются декомпрессия на фоне внутрипротоковой гипертензии, интраоперационная холангиография, контроль за динамикой восстановления пассажа желчи в 12-перстную кишку...

Studopedia.info - Студопедия - 2014-2025 год . (0.012 сек.) русская версия | украинская версия