从基类方法克隆派生类

佩佩特罗夫

我有一个抽象的基类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 { }
  1. 问题是,由于我在Base一类中不知道派生类的类型,Base即使我在派生类上调用它也不会导致拥有一个类实例吗?a.Clone();)(实际上是在测试之后,这是正在发生的事情,但是也许我的测试没有经过精心设计,这就是为什么我对此表示怀疑的原因)

  2. 有没有一种好的方法(模式)来实现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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从基类方法克隆派生类

来自分类Dev

从基类指针克隆派生类

来自分类Dev

Java-如何为基类和派生类实现方法克隆

来自分类Dev

派生类指向基类对象的指针如何调用派生类的方法?

来自分类Dev

从基类和派生类之外的方法返回任何派生类类型

来自分类Dev

派生类指向基类对象的指针如何调用派生类的方法?

来自分类Dev

C ++继承:指向基类的派生类指针调用派生类方法

来自分类Dev

C ++基类和派生类方法的麻烦

来自分类Dev

派生类不继承基类的重载方法

来自分类Dev

从基类指针调用派生类方法

来自分类Dev

返回派生类类型的基类中的方法?

来自分类Dev

从基类实例调用派生类方法

来自分类Dev

如何从基类指针调用派生类方法?

来自分类Dev

Java继承基类使用派生类方法

来自分类Dev

仅从派生类访问基类方法

来自分类Dev

从基类析构函数调用派生类方法

来自分类Dev

C ++:在派生类成员上调用基类方法

来自分类Dev

C#基类方法返回派生类

来自分类Dev

从类型为基类的向量访问派生类方法

来自分类Dev

无法在C ++的派生类中重载基类方法

来自分类Dev

C ++如何从多个派生类调用基类方法?

来自分类Dev

从基类析构函数调用派生类方法

来自分类Dev

使用派生类常量的基类静态方法

来自分类Dev

从基类实例调用派生类方法

来自分类Dev

基类的工厂方法实例化派生类

来自分类Dev

基类和派生类中的构造方法

来自分类Dev

在基类内部使用派生类实例调用带有派生类数据的基类方法

来自分类Dev

如何使派生类可克隆?

来自分类Dev

C ++通过调用基类优雅地克隆派生类

Related 相关文章

热门标签

归档