首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可维护性转换

可维护性转换
EN

Stack Overflow用户
提问于 2015-04-01 15:30:34
回答 1查看 55关注 0票数 0

我有一个从基类继承的类;它几乎完全一样,区别是一个用于帮助intellisense的TypeParam。我想提供一种将现有父类转换为子类的方法。

我目前是这样做的:

代码语言:javascript
复制
class A
{
   public int f1;
   public int f2;
}

class B<T> : A
{
   public static B<T> Create(A a)
   {
       return new B<T>
       {
           f1 = a.f1;
           f2 = a.f2;
       };
   }
}

我担心的是,这不是一个非常可维护的解决方案,如果添加了新的字段或属性,但在create方法中忘记了,可能会导致问题。我也想避免反射仅仅是为了复制一个对象。

有什么更好的方法来实现这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-01 15:38:01

典型的方法是在层次结构中的每个类中提供一个副本构造函数。例如:

代码语言:javascript
复制
class A
{
    private int f1;
    private int f2;

    public A()
    {
       ...
    }

    public A(A original)
    {
        f1 = original.f1;
        f2 = original.f2;
    }
}

class B<T> : A
{
    public B(A original) : base(original)
    {
    }

    // Possibly overload with a B(B<T> original) as well?
}

这样,复制就发生在声明字段的类中。知道如何处理这些字段是最合适的;即使字段是私有的,它也绝对可以访问这些字段;当引入一个新字段时,您只需对同一个类进行更改,而不必对派生类进行更改。

它仍然有点丑陋,如果可能的话,我会避免它--但这取决于上下文。(有时使用组合而不是继承是前进的方向,但这肯定不是普遍正确的。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29394914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档