아시다시피 C #에서는 다음과 같은 작업을 수행 할 수 없습니다.
var voidObject = new void();
또는
var voidObject = new System.Void();
또는
var voidObject = Activator.CreateInstance(typeof(void));
하지만이 코드는 성공적으로 컴파일 및 디버그 모드에서 나는의 유형 볼 수 있습니다 voidObject
입니다 System.Void
:
var voidObject = FormatterServices.GetUninitializedObject(typeof(void));
이게 뭐야? 이 실제 인스턴스 void
입니까?
내가 볼 수 있듯이 완벽하고 완벽하게 유효한 박스형 System.Void
값 유형입니다. :-)
당신은 할 수 있습니다
Console.WriteLine(voidObject.GetType());
그리고 그것이 System.Void
.
System.Void
은 값 유형이므로 작성하는 FormatterServices.GetUninitializedObject
것은 수행하는 것과 동일해야합니다 (object)default(void)
( FormatterServices.GetUninitializedObject
모든 필드가 기본값으로 설정된 값 유형을 반환 하기 때문 입니다) (분명히 (object)default(void)
불법입니다).
여전히 박스형으로 할 수있는 일이 많지 않습니다 System.Void
.
var voidObject = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(void));
var voidObject2 = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeof(void));
Console.WriteLine("Type: {0}", voidObject.GetType());
Console.WriteLine("IsValueType: {0}", voidObject.GetType().IsValueType);
Console.WriteLine("Equals: {0}", voidObject.Equals(voidObject2));
Console.WriteLine("GetHashCode1: {0}", voidObject.GetHashCode());
Console.WriteLine("GetHashCode2: {0}", voidObject2.GetHashCode());
Console.WriteLine("ToString: {0}", voidObject.ToString());
사이에 약간의 차이가있는 것 같다 .NET 및 모노 의 모든 인스턴스 .NET에 ... 구현을 System.Void
동일이는 GetHashCode()
모노에 그들 모두가 다른있는 동안, GetHashCode()
. 는 Equals
제대로 (작동 true
) 둘 다에.
(주는 차이가 있음을 GetHashCode()
와 모노의 버그 것 같다 struct
필드없이 S : https://ideone.com/t0t8I6 이 수정되어야 새로운 릴리스에서)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다