我的问题如下:
我有一个需要抽象的基类。它有几个派生类,每个派生类都有自己的特殊属性,这些属性包含在 Properties 成员中。
我需要能够创建这些派生类之一的新实例,以便所有成员都是等效的,但修改新实例不会修改原始实例。
最后,我想这样做,而不必在基类的每个派生类型中进行硬编码。(诚然,这将是最简单的解决方案,但这不是重点)
所有派生类都满足与基类的“is-a”关系。
这是代码:
public abstract class BaseClass
{
//Default properties here
int x, y, z, ...;
//Custom made class to hold custom properties
protected Attributes Properties;
public BaseClass createNewInstance()
{
return createNewInstanceStep1();
}
//Each derived class implements their own version of this,
//to handle copying any custom members contained in Properties.
protected abstract BaseClass createNewInstanceStep2();
protected BaseClass createNewInstanceStep1()
{
BaseClass newInstance = new BaseClass(); // <- Doesn't work because class is abstract
//Copy default properties
newInstance.x = x;
newInstance.y = y;
newInstance.z = z;
//Call the new instance's step 2 method, and return the result.
return newInstance.createNewInstanceStep2();
}
}
这段代码的问题是 BaseClass newKeyFrame = new BaseClass(); 线。由于该类是抽象的,因此您无法创建它的实例。
问题是我需要能够调用派生类的任何类型的构造函数,因为它们的构造函数中都有不同的代码,无法共享。
我听说使用反射可能是一个可行的解决方案,但我不知道如何。
我怎样才能解决这个问题,而不必在每个派生类型的案例中进行硬编码?