문제

이것

var h = new HashSet<int>();
var r = h.IsReadOnly;

컴파일하지 않습니다. 나는해야한다

var r = ((ICollection<int>)h).IsReadOnly;

Isreadonly가 정상적으로 구현되지 않은 이유는 무엇입니까?

(나는 묻지 않는다 어떻게, 하지만 )

도움이 되었습니까?

해결책

해시 세트는 icollection을 구현하지만 iSreadonly는 해시 세트에 대한 의미가 없기 때문에 그것들을 추측하고 있습니다. 실제로, 당신이 그것을 반영하면, 속성은 항상 거짓을 반환합니다. 이를 구현하면이 방법이 공개 인터페이스 에서이 방법을 숨 깁니다.

또 다른 이유는 클래스의 1 차 사용에 필요한 것이 아니라 부수적 인 이유 (예 : XAML 직렬화를 지원하는) 때문에 ICOLLECTION 인터페이스가 구현 될 수 있기 때문입니다. 따라서이를 구현하면 클래스의 인터페이스에서 혼란을 막을 수 있습니다.

다른 팁

기본적으로 명시 적 인터페이스 구현에 의지하는 두 가지 이유가 있습니다 (출처 : MSDN):

  1. 동일한 서명을 포함하는 멤버와 여러 인터페이스를 구현 하며이 회원이 다르게 행동하기를 원합니다.
  2. 인터페이스 멤버는 클래스에 특히 관심이 없지만 인터페이스에 의해 개체를 참조하기 위해서는 필요합니다.

을 위한 HashSet<T>, 후자의 경우는 해시 세트 만 읽지 않으므로 IsReadOnly 따라서 항상 돌아올 것입니다 false.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top