C# 언어 사양을 통해 검색 중이므로 포인터 유형 (예 : int*
)이 기본값으로 초기화되는지 여부를 확인할 수있는 항목을 찾을 수 없습니다. 간단한 테스트 응용 프로그램을 만들었고 0으로 초기화하는 것처럼 보였습니다.하지만이를 사양과 함께 확인하고 싶습니다. 나는 IntPtr
클래스를 정의하려면이 코드를 사용 반사판에 눈치 때문에C# 포인터 유형의 기본값
나는이 찾기 시작의 IntPtr.Zero
: 당신이 IntPtr.Zero
비교할 때 실제로 할당 된 기본 값과 비교하는 것을 의미
public struct IntPtr : ISerializable
{
private unsafe void* m_value;
public static readonly IntPtr Zero;
.......
public static unsafe bool operator ==(IntPtr value1, IntPtr value2)
{
return (value1.m_value == value2.m_value);
}
........
}
필드에는 void*
유형이 있습니다.
감사합니다.
명확한 할당 분석과 상호 작용하는 방법을 설명하는 포인터를 논의하는 사양의 일부가 있습니다. 명확한 할당 분석의 전체적인 점은 변수의 초기화되지 않은 상태를 관찰하는 것을 피하기위한 것이고 아마도 그 대답은 Mu입니다. 또한 프레임 워크 유형의 구현에서 볼 수있는 모든 것이 전체적인 이야기는 아닙니다. 런타임에 의한 특수 처리로 인해 실제 동작이 생성되는 경우가 있습니다. –
잘 보였다 ... 그들이 스펙을 쓰는 동안 그것을 놓친 것처럼 보인다. 032 (null)이라고 가정 할 수 있습니다 :-) – buffjape
CIL은 포인터 유형을 참조 유형의 하위 집합으로 정의하지만 C#은 포인터 유형을 다른 유형의 클래스로 정의한다는 점에서 혼란을줍니다. 따라서 CIL이 참조 유형의 기본값이 'null'이라는 것을 지정하면 C#이 동일한 것을 지정하는 것보다 더 많은 것을 의미합니다. – hvd