이 내가 C는 #은 C++에서 뒤쪽으로 갔다 생각하는 몇 가지 분야 중 하나입니다.
C++에서
, 당신은
void foo(Bar& bar) { /*...*/ }
은 아주 명확하게 컴파일러와 foo
이 Bar
의 실제 인스턴스를 걸린 다른 사람 모두에 표시하기 위해 작성할 수 있습니다. 예, 가능하다면 - 노력으로 - foo
null 참조를 전달할 수 있지만 그건 정말 합법적이지 C++. C#에서 (종류의)
유일한 "솔루션"당신의 예에서 (null
수 없습니다 .NET에서 값 유형으로, struct
의 대신 class
ES를 만드는 것입니다, B 적 null
될 수 없습니다 System.Int32
이기 때문에). bar()
에 대한 호출이 컴파일되지 않습니다 :
class A { }
struct B { }
static void foo(A a) { }
static void bar(B b) { }
static void Main(string[] args)
{
foo(null);
bar(null);
}
C#을 그것을 만들었하는 것이 좋았을 것처럼 확실히 보인다 (훨씬) 더 어려운 null
참조가하는 단계; 예를 들어 F #에는 null 입력 가능 유형이 없습니다.
이 문제와 관련된 몇 가지 흥미로운 설명은 Null References: The Billion Dollar Mistake (및 설명)을 참조하십시오.
편집 :Eric Lippert에서 2013년 2월 각주 말한다 "... 그냥 그렇게 C#을이 때 처음으로 항상 null이 참조 유형을 가지고 구현 일어났다, ... 그것은 그럴 듯 보인다 Nullable<T>
이 가질 수있는 어떤 유형에서도 작동하도록 구현되었으며 참조 유형은 기본적으로 nullable이 될 수 없습니다. "null
일 수있는 문자열"을 나타낼 수있는 유일한 시스템은 Nullable<string>
입니다. ... "
다음은 거의 정확한 복제입니다. http://stackoverflow.com/questions/718630/not-nullable-types – BenAlabaster