Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法隐式转换类型';附录a1<&书信电报;字符串>&燃气轮机';至';附录a1<&书信电报;对象>&燃气轮机';_C#_Generics_C# 4.0_Covariance - Fatal编程技术网

C# 无法隐式转换类型';附录a1<&书信电报;字符串>&燃气轮机';至';附录a1<&书信电报;对象>&燃气轮机';

C# 无法隐式转换类型';附录a1<&书信电报;字符串>&燃气轮机';至';附录a1<&书信电报;对象>&燃气轮机';,c#,generics,c#-4.0,covariance,C#,Generics,C# 4.0,Covariance,当我试图编译时,我试图从下面的代码中理解泛型和协方差。我犯了这样的错误 错误1无法隐式转换类型 'ConsoleApplication1.a1'到 'ConsoleApplication1.a1' a1级 { 公共无效法(TA) { WriteLine(a.GetType().ToString()); } } 班级计划 { 静态void Main(字符串[]参数) { a1 aa1=新的a1(); a1 aa2=新的a1(); 对象b; aa2.方法(b); aa1.方法(“aa”); aa2=

当我试图编译时,我试图从下面的代码中理解泛型和协方差。我犯了这样的错误

错误1无法隐式转换类型
'ConsoleApplication1.a1'
'ConsoleApplication1.a1'

a1级
{
公共无效法(TA)
{
WriteLine(a.GetType().ToString());
}
}
班级计划
{
静态void Main(字符串[]参数)
{
a1 aa1=新的a1();
a1 aa2=新的a1();
对象b;
aa2.方法(b);
aa1.方法(“aa”);
aa2=aa1;
Console.ReadLine();
}
}
根据以下内容:

泛型类是不变的。换句话说,如果一个输入参数指定了一个
列表
,那么如果您试图提供一个
列表
,就会出现编译时错误

应用于您的示例,由于您正在将
a1
类型的对象分配给
a1
类型的变量,因此出现了一个错误。

根据:

泛型类是不变的。换句话说,如果一个输入参数指定了一个
列表
,那么如果您试图提供一个
列表
,就会出现编译时错误


应用到您的示例中,由于您将
a1
类型的对象分配给
a1
类型的变量,因此出现了一个错误。

括号中的第一个单词是string,第二个单词是object。C#中的类本身既不是协变的,也不是逆变的,它们是不变的。您可以实现协变或逆变接口,但对对象的访问必须通过接口引用。除了它是反变的,而不是协变的。括号中的第一个单词是字符串,第二个是object。C#中的类本身既不是协变的,也不是反变的,它们是不变的。您可以实现协变或逆变接口,但对对象的访问必须通过接口引用。但这是相反的,不是协方差。
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();

    }
}