이 질문에서 오는 why does n.GetHashCode() work but n.GetType() throws and exception? Jon이 준 답변은 다음과 같은 질문을하게됩니다. Nullable<>
이 GetType
를 숨기지 않는 이유는 무엇입니까?Nullable <>이 GetType을 숨기지 않는 이유는 무엇입니까?
public new Type GetType()
{
return GetValueOrDefault().GetType();
}
그러면이
int? i = null;
Console.WriteLine(i.GetType().Name);
이 작동해야합니까? 나는 명백한 것을 놓치고 있는가? 주의 사항은 무엇입니까? 나는 구글을 시도했지만 만족스러운 설명을 찾지 못했습니다.
업데이트 : 명확히하기 위해 : 조금. 이것은 작동합니다 : GetType
int? i = null;
Console.WriteLine(i.GetHashCode());
i.GetType()
이 가상이 아니며 무시할 수 없기 때문에 i.GetType()
이 던지는 유일한 이유는 다음과 같습니다. 그래서 그것을 호출하면 i
는 null
을 결과로 던진 객체로 상자에 넣습니다. 그러나 Nullable
가 다음과 같이 구현 될 경우
public struct Nullable<T> where T : struct
{
....
public new Type GetType()
{
return GetValueOrDefault().GetType();
}
}
그러면 처음 두 호출 대신이 모든 것이 작동한다는 점에서 동작이보다 일관성있게 유지됩니다 (imho).
int? i = null;
Console.WriteLine(i.GetHashCode());
Console.WriteLine(i.ToString());
Console.WriteLine(i.GetType());
'Object'에서 상속 한 메소드를 어떻게 숨길 수 있습니까? – Kevin
게다가, 왜 당신은하고 싶습니까? –
네, 참으로 왜 'null.GetType()'이 null 참조 예외를 던지겠습니까 :) – Poma