문제

IEnumerable<T>, IComparable<T> 그리고 몇 가지 더 이제 유형 변수입니다. IList<T>, ICollection<T> 그리고 다른 많은 사람들은 그렇지 않습니다. 왜요?

도움이 되었습니까?

해결책

.NET Framework 4.0 소개 안전한 CO/Contra-Variance. IList<T> 그리고 ICollection<T> 가지다 T 입력 및 출력 위치 모두에서 IEnumerable<T> 가지다 T 출력 위치에서만 그리고 IComparable<T> 가지다 T 입력 위치에서만.

추정하다 IList<T> 지원되는 유형 분산 :

static void FailingMethod(IList<object> list) {
    list[0] = 5;
}

static void Test() {
    var a = new List<string>();
    a[0] = "hello";
    FailingMethod(a); // if it was variant, this method call would be unsafe
}

다른 팁

Anders Hejlseberg는 그의 대화에서 "C#의 미래"에서 Co/Disravariance를 묘사하는 간단하지만 조명적인 토론을 가지고 있습니다. 공분산과 비밀화에 대한 그의 논의는 프레젠테이션에서 50 분 17 초에 시작됩니다.

http://channel9.msdn.com/pdc2008/tl16/

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