c# – 从基类方法克隆派生类
发布时间:2020-12-15 18:14:59 所属栏目:百科 来源:网络整理
导读:我有一个抽象的基类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(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |