Выражения значения по умолчанию
Выражение значения по умолчанию используется для получения значения по умолчанию (§5.2) для типа. Обычно выражение значения по умолчанию используется для параметров типа, поскольку может быть неизвестно, имеет ли параметр типа тип значения или ссылочный тип. (Если тип параметра типа отличается от ссылочного, то преобразования из литерала null в параметр типа не существует.)
default-value-expression:
default ( type )
Если тип в выражении значения по умолчанию во время выполнения оказывается ссылочным типом, то результатом выражения является значение null, преобразованное в этот тип. Если тип в выражении значения по умолчанию во время выполнения оказывается типом значения, то результатом выражения является значение типа значения по умолчанию (§4.1.2).
Выражение значения по умолчанию является константным выражением (§7.19), если тип является ссылочным или параметром типа, который является ссылочным типом (§10.1.5). Кроме того, выражение значения по умолчанию является константным выражением, если его тип является одним из следующих типов значений: sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool или любым перечисляемым типом.
Выражения анонимного метода
Выражение анонимного метода представляет собой один из двух способов определения анонимной функции. Они описываются дальше в разделе §7.15.
Унарные операторы.
Операторы +, -, !, ~, ++, --, операторы приведения типа и операторы await называются унарными операторами.
unary-expression:
primary-expression
+ unary-expression
- unary-expression
! unary-expression
~ unary-expression
pre-increment-expression
pre-decrement-expression
cast-expression
await-expression
Если операнд унарного выражения имеет тип dynamic во время компиляции, то он динамически связан (§7.2.2). В этом случае тип времени компиляции унарного выражения — dynamic, а разрешение, приведенное ниже, будет иметь место во время выполнения при использовании типа времени выполнения операнда.
Унарный оператор «плюс»
Для операции вида +x чтобы выбрать конкретную реализацию оператора, применяется разрешение перегрузки унарного оператора (§7.3.3). Операнд преобразуется в тип параметра выбранного оператора, а тип результата является типом возвращаемого значения этого оператора. К cтандартным унарным операторам «плюс» относятся:
int operator +(int x);
uint operator +(uint x);
long operator +(long x);
ulong operator +(ulong x);
float operator +(float x);
double operator +(double x);
decimal operator +(decimal x);
Для каждого из этих операторов результатом является просто значение операнда.
Унарный оператор «минус»
Для операции вида –x чтобы выбрать конкретную реализацию оператора, применяется разрешение перегрузки унарного оператора (§7.3.3). Операнд преобразуется в тип параметра выбранного оператора, а тип результата является типом возвращаемого значения этого оператора. К cтандартным операторам взятия обратного знака относятся:
· Взятие обратного знака для целых чисел:
int operator –(int x);
long operator –(long x);
Результат вычисляется вычитанием x из нуля. Если значение x является наименьшим представимым значением для типа операнда (−231 для int или −263 для long)), то математическая операция взятия обратного знака для x не представима в типе операнда. Если это происходит в контексте checked, то возникает исключение System.OverflowException. Если это происходит в контексте unchecked, то результатом является значение операнда и о переполнении не сообщается.
Если операнд оператора взятия обратного знака имеет тип uint, то он преобразуется в тип long и результат имеет тип long. Исключением является правило, которое позволяет записывать значение типа int −2147483648 (−231) в виде литерала десятичного целого числа (§2.4.4.2).
Если операнд оператора взятия обратного знака имеет тип ulong, возникает ошибка времени компиляции. Исключением является правило, которое позволяет записывать значение типа long −9223372036854775808 (−263) в виде литерала десятичного целого числа (§2.4.4.2).
· Взятие обратного знака для чисел с плавающей запятой:
float operator –(float x);
double operator –(double x);
Результатом является значение x с обратным знаком. Если x является NaN, то результат также равен NaN.
· Взятие обратного знака для десятичных чисел:
decimal operator –(decimal x);
Результат вычисляется вычитанием x из нуля. Взятие обратного знака для десятичных чисел эквивалентно использованию унарного оператора «минус» типа System.Decimal.