C#의 배열: 인터페이스 구현에 대한 심층 분석
C#의 배열은 IList를 구현하는 것처럼 보이지만 Count 속성을 공개적으로 노출하지는 않습니다. 이는 C# 인터페이스 구현 규칙과 모순되는 것처럼 보일 수 있습니다.
실제로 배열은 System.Collections.Generic.IList가 아닌 System.Collections.IList를 구현합니다. IList와 같은 일반 인터페이스 Array와 같은 제네릭이 아닌 유형으로는 구현할 수 없습니다.
그러나 CLR은 잠재적으로 이러한 인터페이스를 구현할 수 있는 특정 배열 유형을 생성합니다. 그러나 이러한 구체적인 배열 유형의 경우에도 IEnumerable 작동하지만 인터페이스 맵을 검색하면 예외가 발생합니다.
이는 컴파일러와 CLR이 배열을 IList 구현으로 인식하는 "돌팔이처럼" 입력 때문입니다. 캐스트 명령은 IList 구현을 제공하는 숨겨진 래퍼 클래스 System.SZArrayHelper에 의해 처리됩니다.
Count 속성이 명시적으로 구현되지 않더라도 CLR은 T[] 배열에 대한 캐스트를 사용하여 내부 getter를 제공합니다.
이 동작은 다소 독특하지만 다음을 허용합니다. IList의 원활하고 효율적인 구현을 위해; 배열의 경우. 이는 유연성과 성능에 기여하는 C# 및 CLR의 숨겨진 메커니즘을 보여주는 영리한 기술입니다.
위 내용은 C# 배열이 `IList`를 직접 구현하지 않는 이유는 무엇이며 여전히 어떻게 보입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!