可能重复: 统一registerType中泛型参数的多态解析
这可能是显而易见的。但是有人能告诉我为什么这是无效代码吗?编译器说它不能将Class1<string>
转换成Class1<object>
。这种方式对仿制药是不允许的吗?如果是的话,原因何在?
namespace Test
{
public class Tests
{
public void Test()
{
Class1<object> objectClass1 = new Class1<string>();
}
}
class Class1<T>
{
}
}
发布于 2011-08-26 13:39:11
看一下
广义协方差与反方差。
Eric Lippert有一系列博客文章在这个问题上。
发布于 2011-08-26 13:38:19
String、Int32等是Struct类型,而对象、Person等是C#的类对象。因此,在创建泛型时,如果计划使用强制转换功能,则必须指定约束。所以,你可以用
public void Method<T>() where T : class
or
public void Method<T>() where T : struct
https://stackoverflow.com/questions/7205409
复制相似问题