2010-07-30 2 views
49

나는 this article을보고 있었고 해제 된 연산자를 설명하는 VB.NET 예제를 따르기 위해 고심 중입니다. 동일한 C# 예제 또는 자습서가없는 것 같습니다. 나는 일반적으로 연산자 오버로딩에 대한 많은 경험이 없으므로 null 가능한 형식을 읽는 동안 VB.NET 동등 물을 사용하여 용어를 사용하려고 시도하는 것은 아마도 가장 좋은 곳이 아닙니다. ...들어 올림식 연산자 란 무엇입니까?

들어 올린 연산자에 대한 설명을 제공 할 수 있으며 nullable 형식으로 사용되는 방법은 무엇입니까? 그것은 nullable 타입 자체가 연산자를 오버로드하지 않고 그것이 나타내는 기본 타입의 연산자를 사용한다는 것을 의미합니까?

해제 된 연산자에 대한 정보가 너무 많지 않으므로 다른 사람들에게도 도움이 될 수 있기를 바랍니다.

감사

+0

아 .. (null >> 1)이 잘못되어서 그 이유는 무엇일까요? (int? x = null; (x >> 1) ?? -1;)의 두 번째 문에서 x에 대해 작동하는 것으로 보입니다. 그 생각? 유효한 형식 ((x == null)? -1 : (x >> 1);)으로 "변환"합니다. 대신에 (x >> 1)에서 작동 중이며 그 값 (null >> 1)이 유효합니다. – blizpasta

답변

92

드러내 사업자들은 이미 nullable이 아닌 형태로 존재 "리프팅"운영자에 의해 nullable 형식을 통해 작동 사업자이다. 예를 들어, 다음과 같은 경우 :

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

"+"연산자가 해제됩니다. 실제로는 Nullable<int>에 존재하지 않지만 C# 컴파일러는 마치 코드를 생성하는 것처럼 작동하여 올바른 작업을 수행하는 코드를 생성합니다. (대부분의 경우 두 피연산자 중 하나가 null인지 여부를 확인하기위한 것이고, 그렇다면 결과는 null입니다. 그렇지 않으면 두 피연산자를 nullable이 아닌 값으로 풀고 일반 연산자를 사용하여 결과를 다시 a로 그러나 비교를 둘러싼 몇 가지 특수한 경우가 있습니다.)

자세한 내용은 C# spec의 섹션 6.4.2 (해제 된 변환 연산자) 및 7.3.7 (해제 된 연산자)을 참조하십시오.

+3

이 답변은 "옳은 일"이 실제로 무엇인지에 대해서는 언급하지 않았는데, 나는 그것이 떠 올린 운영자가 어떻게 일하는가의 가장 중요한 측면이라고 생각할 것입니다. – Ani

+0

@ JonSkeet : 링크가 C# 5 사양으로 전달됩니다. 여기에 5를 말하거나 4 스펙에 링크 하시겠습니까? –

+0

@ Cᴏʀʏ : C# 4 사양 이었지만 링크가 C# 5 사양으로 바뀌 었습니다. 몇 달 후 C# 6 사양이 될 수 있습니다 :) –

관련 문제