使用泛型类型参数进行上传

Aur*_*eer 6 c# generics casting

是否有可能从基于T的泛型类"upcast"到基于比T更通用的泛型类?

例如,假设我有一个名为Derived继承自名为的类的类Base.我可以做这样的事情:

List<Derived> der = new List<Derived>();
List<Base> bas = (List<Base>) der;
Run Code Online (Sandbox Code Playgroud)

或者,使用接口,是否可以执行以下操作:

List<MyClonableType> specific = new List<MyClonableType>();
List<IClonable> general = (List<IClonable>)specific;
Run Code Online (Sandbox Code Playgroud)

正如这里所写,每个例子都失败了InvalidCastException.我们争论的问题是它是否实际上是不可能的,或者只是一个语法错误,如果我们知道如何可以修复.

Bry*_*tts 3

C# 4.0 将具有该功能。

它将在遵守某些规则的接口和委托上启用。List<T>不会被支持,因为它是一个具体的类。IList<T>也不会被支持,因为它的方法Tinout位置中使用。