假设您具有以下三个类(我省略了实现):
abstract class BaseClass
class Derived1 : BaseClass
class Derived2 : BaseClass
现在,在BaseClass
中,我想定义一个方法,该方法应该返回相同实例的新的,经过稍微修改的版本。但这是问题所在:我无法构造BaseClass
,因为它是抽象的,而且由于我们位于BaseClass
中,所以我不知道您使用的是哪个派生类。
我能想到的唯一解决方法是使它成为一种抽象方法,并使每个派生类实现其自己的版本。但是,仅更改一个类名就需要大量重复代码。有什么更好的方法吗?
答案 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>();