考慮以下幾點:IEnumerable的<T>轉換
class Base<T> {/*...*/}
class Der<T>: Base<T> {/*...*/}
interface Sth<T>{
IEnumerable<Base<T>> Foo {get;}
}
// and implementation...
class Impl<T>: Sth<T> {
public IEnumerable<Base<T>> Foo {
get {
return new List<Der<T>>();
}
}
}
我如何能得到這個編譯?很顯然,錯誤並不是從列表< Der < T >>到列表<基址< T >>中發現的隱式轉換。如果我明確強制轉換,則發生InvalidCastException。
如果是你,你可能想要看我特別發達的一系列關於這項功能的C#4.0設計這個話題的興趣:http://blogs.msdn.com/ericlippert/archive/tags/Covariance+and+ Contravariance/default.aspx – 2009-10-15 03:36:13