【发布时间】:2010-11-30 22:07:29
【问题描述】:
我的问题与泛型类型中的转换类有关。虽然我意识到将List<string> 之类的对象转换为List<object> 需要支持协方差以防止将object 对象添加到包含字符串的列表中,但我想知道为什么编译器不接受像下面这样的转换以及它是否是使用接口和协变或逆变可解:
public class TypeA<T> {}
public class TypeB<T> {}
public class TypeC : TypeB<int> {}
class Program
{
public static void MyMethod<OutputType>(TypeA<TypeB<OutputType>> Parameter) {}
static void Main(string[] args)
{
TypeA<TypeC> Test = new TypeA<TypeC>();
MyMethod<int>(Test);
}
}
编译这个会报错:
Argument 1: cannot convert from 'ConsoleApplication1.TypeA<ConsoleApplication1.TypeC>' to 'ConsoleApplication1.TypeA<ConsoleApplication1.TypeB<int>>'.
尽管TypeC 是TypeB<int> 的直接后代
【问题讨论】:
标签: c# generics inheritance casting