이유는 Enumerator
컬렉션 수정할 수 없습니다 때문이다 : 우리가 List<object>
과 같은 일을하려고하면 IEnumerable<object>
대신,왜 ReadOnlyCollection에는 공분산이 허용되지 않습니까? 이 코드가 작동
var roList = new List<string>() { "One", "Two", "Three" };
IEnumerable<object> objEnum = roList;
을, 우리는 컴파일러 오류 텔링을 얻을 것 암시 적으로 유형 List<string>
을 List<object>
으로 변환 할 수 없습니다. 좋아, 저것은 이해가된다. 그리고 나의 의견으로는, 배열로부터 배웠던 교훈으로서 마이크로 소프트에 의한 좋은 결정이었다.
그러나 내가 알 수없는 것은 세계에서이 강경론 규칙이 ReadOnlyCollection
과 같은 것에 적용되는 이유는 무엇입니까? ReadOnlyCollection
의 요소를 수정할 수 없으므로 Microsoft에서 안전을 고려했을 때 읽기 전용 인 것과 함께 공분산을 사용하지 못하게했을 수 있습니다. 포인터를 통해 Microsoft가 고려하려고했던 컬렉션 유형을 수정할 수있는 방법이 있습니까?
"배열에서 배운 교훈": 배열 공분산에 대해, 이것은 실제로 자바가 허용했기 때문에 의식적인 디자인 결정이었습니다. 그것은 꽤 나쁜 생각으로 밝혀졌습니다 ... http://blogs.msdn.com/b/ericlippert/archive/2007/10/17/covariance-and-contravariance-in-c-part-two-array- covariance.aspx –
@ThomasLevesque 좋은 읽을 거리, 감사합니다. –