Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
Топ:
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Интересное:
Распространение рака на другие отдаленные от желудка органы: Характерных симптомов рака желудка не существует. Выраженные симптомы появляются, когда опухоль...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
К стандартным операторам равенства значений ссылочного типа относятся:
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.
Операторы равенства строк
К стандартным операторам равенства строк относятся:
bool operator ==(string x, string y);
bool operator!=(string x, string y);
Два значения типа string считаются равными, когда истинно одно из следующих условий:
· оба значения равны null;
· оба значения являются непустыми ссылками на экземпляры строк с одинаковой длиной и идентичными символами в каждой позиции.
Операторы равенства строк сравнивают значения строк, а не ссылки на строки. Когда два разных экземпляра строк содержат одинаковую последовательность символов, значения строк равны, но ссылки отличаются. Как описано в разделе §7.10.6, для сравнения ссылок на строки вместо строковых значений можно использовать операторы равенства значений ссылочного типа.
|
|
|
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!