【发布时间】:2020-12-21 09:17:47
【问题描述】:
假设我有一个基类 Animal。
public abstract class Animal;
这个动物类有抽象方法:
public abstract T Copy<T>() where T : Animal
当此方法在 Lion 类中被覆盖时:
public class Lion : Animal
{
string roar = "Roar";
}
我希望返回没有参考资料的这只狮子的副本。所以我认为应该像这样覆盖它:
public abstract T Copy<T>()
{
return new Lion(){
roar = this.roar;
}
}
但这是不允许的,因为 Lion 无法转换为 T 类型(即动物)。
这是一个可以理解的错误,因为并非每只动物都一定是狮子。
但是我如何设置这种情况,复制方法知道它应该返回子类,在这种情况下是 Lion,并且不必将各种类型转换为正确的类型?并且仍然让每个动物都有一个方法 Copy()。
【问题讨论】:
-
为什么你认为强制所有子类都有这样的
Copy方法很有用?您可以在每个子类中声明一个非泛型Copy。
标签: c# generics inheritance