c# – 从基类方法克隆派生类

c# – 从基类方法克隆派生类,第1张

概述我有一个抽象的基类Base,它有一些共同的属性,以及许多派生的,它们实现不同的逻辑,但很少有其他字段. public abstract Base{ protected int field1; protected int field2; .... protected Base() { ... }} 有时我需要克隆派生类.所以我的猜测是,只需在我的基类中创建一个虚 我有一个抽象的基类Base,它有一些共同的属性,以及许多派生的,它们实现不同的逻辑,但很少有其他字段.
public abstract Base{    protected int fIEld1;    protected int fIEld2;    ....    protected Base() { ... }}

有时我需要克隆派生类.所以我的猜测是,只需在我的基类中创建一个虚拟Clone方法,并且只在具有其他字段的派生类中覆盖它,但当然我的Base类不再是抽象的(这不是问题,因为它只有受保护的构造函数).

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();)(实际上在测试之后这是发生了什么,但也许我的测试设计得不好,这就是为什么我对它有疑问)
>有没有一种好的方法(模式)来实现一个基本的克隆方法,它可以按照我的预期工作,或者我必须在每个派生类中编写相同的代码(我真的想避免这种情况……)

谢谢你的帮助

解决方法 只需覆盖克隆并使用另一种方法来创建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 virtual Base Clone()     {         var a = (A)base.Clone();        a.fIEldInA =5;        return a;    }    protected virtual Base CreateInstanceForClone()    {        return new A();     }}
总结

以上是内存溢出为你收集整理的c# – 从基类方法克隆派生类全部内容,希望文章能够帮你解决c# – 从基类方法克隆派生类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1240260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存