我有一个抽象的基类Base
,它具有一些共同的属性,许多派生的基类实现了不同的逻辑,但很少有其他字段。
public abstract Base
{
protected int field1;
protected int field2;
....
protected Base() { ... }
}
有时我需要克隆派生类。所以我的猜测是,只需Clone
在我的基类中创建一个虚拟方法,然后在具有其他字段的派生类中重写它,但是当然我的Base
类将不再是抽象的(这不是问题,因为它只有一个protected
构造函数) )。
public Base
{
protected int field1;
protected int field2;
....
protected Base() { ... }
public virtual Base Clone() { return new Base(); }
}
public A : Base { }
public B : Base { }
问题是,由于我在Base一类中不知道派生类的类型,Base
即使我在派生类上调用它也不会导致拥有一个类实例吗?(a.Clone();
)(实际上是在测试之后,这是正在发生的事情,但是也许我的测试没有经过精心设计,这就是为什么我对此表示怀疑的原因)
有没有一种好的方法(模式)来实现Clone
可以按我期望的方式工作的基本方法,或者我必须在每个派生类中编写相同的代码(我真的想避免这种情况……)
谢谢你的帮助
只需覆盖,Clone
然后使用另一种方法来CreateInstance
完成任务即可。
这样,您可能只有Base
避免通用类的类。
public Base
{
protected int field1;
protected int field2;
....
protected Base() { ... }
public virtual Base Clone()
{
var bc = CreateInstanceForClone();
bc.field1 = 1;
bc.field2 = 2;
return bc;
}
protected virtual Base CreateInstanceForClone()
{
return new Base();
}
}
public A : Base
{
protected int fieldInA;
public override Base Clone()
{
var a = (A)base.Clone();
a.fieldInA =5;
return a;
}
protected override Base CreateInstanceForClone()
{
return new A();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句