当我尝试编译时,我试图从以下代码中理解泛型和协方差。我收到错误
错误1无法隐式转换类型
'ConsoleApplication1.a1<<string>>'
来'ConsoleApplication1.a1<<object>>'
class a1<T>
{
public void Fmethod( T a)
{
Console.WriteLine(a.GetType().ToString());
}
}
class Program
{
static void Main(string[] args)
{
a1<string> aa1 = new a1<string>();
a1<object> aa2 = new a1<object>();
object b;
aa2.Fmethod(b);
aa1.Fmethod("aa");
aa2 = aa1;
Console.ReadLine();
}
}
答案 0 :(得分:2)
根据docs:
通用类是不变的。换句话说,如果输入参数指定
List<BaseClass>
,如果您尝试提供List<DerivedClass>
,则会出现编译时错误。
应用于您的示例,因为您要将a1<string>
类型的对象分配给类型为a1<object>
的变量,所以会出错。