C# 无法将派生类型隐式转换为基泛型类型
以下代码未使用编译 错误CS0029:无法将类型“CSConsoleTest.Derived”隐式转换为“T” 这是编译器错误还是原因C# 无法将派生类型隐式转换为基泛型类型,c#,C#,以下代码未使用编译 错误CS0029:无法将类型“CSConsoleTest.Derived”隐式转换为“T” 这是编译器错误还是原因 public class Base { public Derived Derived; } public class Derived : Base { } class Program { public static void Func<T>(T obj) where T : Base { obj = obj.D
public class Base
{
public Derived Derived;
}
public class Derived : Base
{
}
class Program
{
public static void Func<T>(T obj) where T : Base
{
obj = obj.Derived;
}
}
公共类基
{
公共衍生;
}
派生的公共类:基
{
}
班级计划
{
公共静态无效函数(T obj),其中T:Base
{
obj=派生的obj;
}
}
T
可以是从T
派生的任何类,但并不总是基类。例如:
public class Derived1 : Base
{
}
public class Derived2 : Base
{
}
T
可以是Derived1
或Derived2
或Base
您不能将Derived1
转换为Derived2
,这就是编译器拒绝隐式转换的原因
obj = obj.Derived as T; // safe explicit cast.
除此之外,我不建议在基类中包含child类。如果你说出你的想法,也许我们可以给你一条正确的道路。因此,我编写了调用
Func(a)代码>。你认为现在会发生什么?谢谢。这是一个愚蠢的问题,你的意思可能是T