是否可以在抽象基类中构造派生类?

时间:2020-02-23 22:44:08

标签: c# inheritance abstract-class

假设您具有以下三个类(我省略了实现):

abstract class BaseClass
class Derived1 : BaseClass
class Derived2 : BaseClass

现在,在BaseClass中,我想定义一个方法,该方法应该返回相同实例的新的,经过稍微修改的版本。但这是问题所在:我无法构造BaseClass,因为它是抽象的,而且由于我们位于BaseClass中,所以我不知道您使用的是哪个派生类。

我能想到的唯一解决方法是使它成为一种抽象方法,并使每个派生类实现其自己的版本。但是,仅更改一个类名就需要大量重复代码。有什么更好的方法吗?

1 个答案:

答案 0 :(得分:3)

如何使用泛型类型?

public abstract class BaseClass
{
    public T GetSlightlyModifiedInstance<T>() where T : new, BaseClass
    {
        return new T(); // Do whatever there
    }
}

那么您可以像这样使用它

Derived1 derived1 = new Derived1();
Derived2 derived2 = new Derived2();

Derived1 modifiedDerived1 = derived1.GetSlightlyModifiedInstance<Derived1>();
Derived2 modifiedDerived2 = derived2.GetSlightlyModifiedInstance<Derived2>();
相关问题