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

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

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






E is T? (T)(object)(E): (T)null

Обратите внимание, что некоторые преобразования, например пользовательские преобразования нельзя использовать с оператором as и вместо них следует использовать выражения приведения типа.

В примере

class X
{

public string F(object o) {
return o as string; // OK, string is a reference type
}

public T G<T>(object o) where T: Attribute {
return o as T; // Ok, T has a class constraint
}

public U H<U>(object o) {
return o as U; // Error, U is unconstrained
}
}

параметр T для G имеет ссылочный тип, поскольку у него есть ограничение класса. Напротив, параметр типа U для H не имеет ссылочного типа, поэтому использование оператора as в H запрещено.

 

7.11 Логические операторы;

Операторы &, ^ и | называются логическими операторами.

выражение_И:
выражение_равенства
выражение_И & выражение_равенства

выражение_исключающего_ИЛИ:
выражение_И
выражение_исключающего_ИЛИ ^ выражение_И

выражение_включающего_ИЛИ:
выражение_исключающего_ИЛИ
выражение_включающего_ИЛИ | выражение_исключающего_ИЛИ

Если операнд логического оператора имеет динамический тип во время компиляции, то он динамически связан (§7.2.2). В этом случае тип времени компиляции выражения динамический, а разрешение, приведенное ниже, будет иметь место во время выполнения при использовании типа времени выполнения тех операндов, которые имеют динамический тип во время компиляции.

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

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

7.11.1 Логические операторы для целых чисел

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

int operator &(int x, int y);
uint operator &(uint x, uint y);
long operator &(long x, long y);
ulong operator &(ulong x, ulong y);

int operator |(int x, int y);
uint operator |(uint x, uint y);
long operator |(long x, long y);
ulong operator |(ulong x, ulong y);

int operator ^(int x, int y);
uint operator ^(uint x, uint y);
long operator ^(long x, long y);
ulong operator ^(ulong x, ulong y);

Оператор & выполняет логическую побитовую операцию AND для двух операндов, оператор | выполняет логическую побитовую операцию OR для двух операндов, а оператор ^ выполняет логическую побитовую операцию исключающего OR для двух операндов. Эти операции не порождают переполнения.

7.11.2 Логические операторы для перечислений

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

E operator &(E x, E y);
E operator |(E x, E y);
E operator ^(E x, E y);

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

7.11.3 Логические операторы;

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

bool operator &(bool x, bool y);

bool operator |(bool x, bool y);

bool operator ^(bool x, bool y);

Результат x & y равен true, если оба операнда x и y равны true. Иначе результат равен false.

Результат x | y равен true, если хотя бы один операнд x или y равен true. Иначе результат равен false.

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

7.11.4 Обнуляемые логические операторы

Обнуляемый логический тип bool? может представлять три значения: true, false и null, и, по сути, аналогичен типу из трех значений, используемому в логических выражениях в SQL. Чтобы обеспечить согласованность результатов операторов & и | с операндами типа bool? с троичной логикой SQL, предоставляются следующие стандартные операторы:

bool? operator &(bool? x, bool? y);

bool? operator |(bool? x, bool? y);

В следующей таблице перечисляются результаты данных операторов для всех комбинаций значений true, false и null.

 

x y x & y x | y
true true true true
true false false true
true null null true
false true false true
false false false false
false null false null
null true null true
null false false null
null null null null

 

7.12 Условные логические операторы

Операторы && и || называются условными логическими операторами. Они также называются логическими операторами «краткой записи».

выражение_условного_И:
выражение_включающего_ИЛИ
выражение_условного_И && выражение_включающего_ИЛИ

выражение_условного_ИЛИ:
выражение_условного_И
выражение_условного_ИЛИ || выражение_условного_И

Операторы && и || являются условными версиями операторов & и |.

· Операция x && y соответствует операции x & y, за исключением того, что y вычисляется, только если x не равен false.

· Операция x || y соответствует операции x | y, за исключением того, что y вычисляется, только если x не равен true.

Если операнд условного логического оператора имеет динамический тип во время компиляции, то он динамически связан (§7.2.2). В этом случае тип времени компиляции выражения динамический, а разрешение, приведенное ниже, будет иметь место во время выполнения при использовании типа времени выполнения тех операндов, которые имеют динамический тип во время компиляции.

Операция вида x && y или x || y обрабатывается с применением разрешения перегрузки (§7.3.4), как если бы операция записывалась в виде x & y или x | y. Тогда

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

· Иначе, если выбранный оператор является одним из стандартных логических операторов (§7.11.3) или обнуляемых логических операторов (§7.11.4), то операция выполняется, как описано в разделе §7.12.1.

· Иначе выбранный оператор является пользовательским оператором, и операция выполняется, как описано в разделе §7.12.2.







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



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

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

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

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

Ведение учета результатов боевой подготовки в роте и во взводе Содержание журнала учета боевой подготовки во взводе. Учет результатов боевой подготовки - есть отражение количественных и качественных показателей выполнения планов подготовки соединений...

Сравнительно-исторический метод в языкознании сравнительно-исторический метод в языкознании является одним из основных и представляет собой совокупность приёмов...

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

Виды нарушений опорно-двигательного аппарата у детей В общеупотребительном значении нарушение опорно-двигательного аппарата (ОДА) идентифицируется с нарушениями двигательных функций и определенными органическими поражениями (дефектами)...

Особенности массовой коммуникации Развитие средств связи и информации привело к возникновению явления массовой коммуникации...

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