2011-09-23 2 views
1

가능한 중복 :
How does List<T> make IsReadOnly private when IsReadOnly is an interface member?C# 목록 <T> 속성을 숨 깁니 까?

좋아,이 날 미치게됩니다. List<T>IList<T>을 구현합니다. 그러나

IList<int> list = new List<int>(); 
bool b = list.IsReadOnly; 
bool c = ((List<int>)list).IsReadOnly; // Error 

오류 :

'System.Collections.Generic.List은'isReadOnly의 '없이 확장 방법에 대한 정의를 포함하지 않는'isReadOnly의 '형식의 첫 번째 인수를 받아들이는 'System.Collections.Generic.List'를 찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?)

어떻게 될 수 있습니까? 이것은 우리가 모든 사람들에게 숨기지 않는 것에 관한 바로 그 원칙을 위반하지 않습니까? 구현 세부 사항은 무엇입니까?

+0

이 더 나은 것은 반사판을 사용하도록 세부 사항으로 얻을 수있는 클래스 인스턴스를 통해 액세스,하지만 인터페이스의 인스턴스를 통해 할 수 없습니다 수 –

답변

0

,이 나타납니다 :

bool IList.IsReadOnly { [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] 
     get; } 

가 정말 관련이있는 모든 isReadOnly의 객체 인 경우 속성에만 표시 될 수 있다는 것을 의미 명시 적 구현을 ​​사용하여 선언되어있다 IList라고 선언했다.

0

명시 적 인터페이스 구현, 같은 :

bool IList<T>.IsReadOnly { get; } 
1

List<T> 구현 IList<T> 명시 적으로 IsReadOnly에 액세스 할 수있는 전에 인터페이스에 개체를 캐스팅 그래서. MSDN에서 :

인터페이스를 구현하는 클래스는 명시 적으로 해당 인터페이스의 구성원 을 구현할 수 있습니다. 회원이 명시 적으로 구현되면,

관련 문제