>백엔드 개발 >C++ >C# 배열은 명시적인 개수 속성 없이 IList를 어떻게 구현하는 것처럼 보입니까?

C# 배열은 명시적인 개수 속성 없이 IList를 어떻게 구현하는 것처럼 보입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-05 09:30:39386검색

How Do C# Arrays Seemingly Implement IList Without an Explicit Count Property?

개수 속성이 누락되었음에도 불구하고 배열이 IList를 부분적으로 구현하는 방법

C#에서 배열은 IList를 구현하지만 인터페이스에 명시적으로 선언된 Count 속성이 부족합니다. 이로 인해 이 동작이 인터페이스 구현 규칙을 위반한 것인지 아니면 단순한 오해인지에 대한 의문이 제기되었습니다.

프레임워크 살펴보기

배열은 IList 인터페이스. 그러나 직접적인 구현은 존재하지 않습니다.

CLR의 Quacks-Like-a-Duck 접근 방식

CLR은 값에 사용되는 것과 유사한 배열에 대한 특수 기술을 구현합니다. 유형. 컴파일러는 IList에 대한 캐스트를 인식합니다. 기본 배열 개체를 통해 이를 구현하도록 CLR에 지시합니다. 그런 다음 CLR은 필요한 인터페이스를 구현하는 숨겨진 System.SZArrayHelper 클래스에 실행을 위임합니다.

Count 속성 구현

Count 속성은 명시적으로 선언되지 않았음에도 불구하고 액세스할 수 있습니다. 그러나 다음과 같이 구현됩니다.

internal int get_Count<T>() {
    // Warning: "this" is an array, not an SZArrayHelper
    T[] _this = JitHelpers.UnsafeCast<T[]>(this);
    return _this.Length;
}

댓글에서 알 수 있듯이 이 동작은 규칙 위반으로 간주될 수 있지만 효율적인 배열 처리를 용이하게 합니다.

결론

배열은 IList를 부분적으로 구현합니다. CLR의 돌팔이 오리 같은 접근 방식을 통해. Count 속성은 명시적으로 정의되지 않지만 CLR에 의해 내부적으로 구현되므로 배열과 일반 컬렉션 간의 원활한 통합이 가능합니다.

위 내용은 C# 배열은 명시적인 개수 속성 없이 IList를 어떻게 구현하는 것처럼 보입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.