Какие поднятые операторы? - PullRequest
56 голосов
/ 30 июля 2010

Я просматривал эту статью и изо всех сил стараюсь следовать примеру VB.NET, который объясняет поднятые операторы.Кажется, что нет эквивалентного примера C # или учебника.У меня нет большого опыта работы с перегрузкой операторов в целом, поэтому попытка примириться с эквивалентом VB.NET при чтении обнуляемых типов, вероятно, не лучшее место для начала ...

БудетКто-нибудь сможет дать объяснение поднятым операторам и как они используются обнуляемыми типами?Означает ли это, что обнуляемый тип сам по себе не перегружает операторы и будет использовать операторы базового типа, который он представляет?может помочь и другим.

Ответы [ 2 ]

105 голосов
/ 30 июля 2010

Поднятые операторы - это операторы, которые работают над обнуляемыми типами, «поднимая» операторов, которые уже существуют в ненулевой форме. Так, например, если вы делаете:

int? x = 10;
int? y = 10;
int? z = x + y;

Этот оператор "+" снят. На самом деле он не существует на Nullable<int>, но компилятор C # действует так, как будто он это делает, генерируя код для правильных действий. (В большинстве случаев это вопрос проверки, является ли любой операнд нулевым; если это так, результат равен нулю. В противном случае разверните оба операнда до их ненулевых значений, используйте оператор normal, а затем оберните результат обратно Обнуляемое значение. Есть несколько особых случаев, связанных с сравнениями.)

Для получения дополнительной информации см. Раздел 6.4.2 (операторы поднятого преобразования) и 7.3.7 (операторы поднятого) спецификации C # .

0 голосов
/ 04 мая 2019

Поднятые операторы позволяют использовать предопределенные и определяемые пользователем операторы, которые работают с необнуляемыми типами, для их обнуляемых форм.

...