C# 无法隐式转换类型';附录a1<&书信电报;字符串>&燃气轮机';至';附录a1<&书信电报;对象>&燃气轮机';
当我试图编译时,我试图从下面的代码中理解泛型和协方差。我犯了这样的错误 错误1无法隐式转换类型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=
'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();
}
}