无法隐式转换类型&#39; app.a1&lt; <string>&gt;&#39;到&#39; app.a1&lt; <object>&gt;&#39;

时间:2017-03-06 07:09:45

标签: c# generics c#-4.0 covariance

当我尝试编译时,我试图从以下代码中理解泛型和协方差。我收到错误

  

错误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();

    }
}

1 个答案:

答案 0 :(得分:2)

根据docs

  

通用类是不变的。换句话说,如果输入参数指定List<BaseClass>,如果您尝试提供List<DerivedClass>,则会出现编译时错误。

应用于您的示例,因为您要将a1<string>类型的对象分配给类型为a1<object>的变量,所以会出错。