1
실패 나는 IBar
interface
을 구현 T
class
있습니다.목록 <T> 주조 ICollection에 <IBar>에이
List<T>
의 변수 list
이 있습니다. 언어에 대한 이해를 향상
두 질문 :
하지 않는 이유는이 작품?
var foo = (ICollection <IBar>)list; // fails!
어떻게 (가능한 경우)를 해결하기 위해?
실패 나는 IBar
interface
을 구현 T
class
있습니다.목록 <T> 주조 ICollection에 <IBar>에이
List<T>
의 변수 list
이 있습니다. 언어에 대한 이해를 향상
두 질문 :
하지 않는 이유는이 작품?
var foo = (ICollection <IBar>)list; // fails!
어떻게 (가능한 경우)를 해결하기 위해?
왜이 작품?
var foo = (ICollection <IBar>)list;
이의이 T = Foo
말을하자 두 번째 클래스 Foo2 : IBar
거기를하지 않습니다.
은 그럼 당신은 이런 식으로 계속할 수 :
var foolist = (ICollection <IBar>)list;
foolist.Add(new Foo2()); // compiles, since Foo2 also implements IBar
왬을! List<Foo>
에 Foo2
을 추가하려고 했으므로 런타임에 유형 위반이 있습니다. 이 문제를 방지하려면
ICollection<Foo>
는
Foo
이
IBar
의 서브 타입 임에도 불구하고,하지
ICollection<IBar>
의 하위 유형
이다. 이 이론의 배경은 co- and contravariance입니다.
.net 4를 사용하고 있습니까? –
아니요, .NET 3.5입니다. –