好的,我有许多不同的类都衍生自一个基类。这个基类是一个抽象类,包含常用方法。
其中一个方法是一个 Copy
方法,应该在所有派生类中出现,所以我将其放在了基类中。
但是,我希望它返回 派生类型
而不是基类或对象。
我的解决方案是使用类型参数:
abstract class CopyableClass<T>
{
public abstract T Copy();
}
class DerivedClass : CopyableClass<DerivedClass>
{
public override DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}
所以,这里的主要目的是移除基类中的类型参数,并仍然使方法返回相应的派生类型。
一个解决方法。
我目前能做到的最好的事情是下面的一条评论,但它仍然使用了一个泛型参数。
abstract class BaseClass
{
//base methods not related to deriving type
}
interface ICopyable<T>
{
T Copy();
}
class DerivedClass : BaseClass, ICopyable<DerivedClass>
{
public DerivedClass Copy()
{
//do what is needed for copy and return a new DerivedClass
}
}