以下代码未使用
编译错误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.Derived;
}
}
答案 0 :(得分:0)
T
可以是从T
派生的任何类,而不是总是基类。例如:
public class Derived1 : Base
{
}
public class Derived2 : Base
{
}
T
可以是Derived1
或Derived2
或Base
。
你无法将Derived1
强制转换为Derived2
,这就是编译器拒绝隐式强制转换的原因。
obj = obj.Derived as T; // safe explicit cast.
除此之外,我不建议在基类中使用子类。如果你告诉你的想法,或许我们可以给你正确的道路。