Студопедия — 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; просмотров: 406. Нарушение авторских прав; Мы поможем в написании вашей работы!



Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

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

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

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

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

Тема 5. Анализ количественного и качественного состава персонала Персонал является одним из важнейших факторов в организации. Его состояние и эффективное использование прямо влияет на конечные результаты хозяйственной деятельности организации.

Билет №7 (1 вопрос) Язык как средство общения и форма существования национальной культуры. Русский литературный язык как нормированная и обработанная форма общенародного языка Важнейшая функция языка - коммуникативная функция, т.е. функция общения Язык представлен в двух своих разновидностях...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

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

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

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