我有一个从基类继承的类;它几乎完全一样,区别是一个用于帮助intellisense的TypeParam。我想提供一种将现有父类转换为子类的方法。
我目前是这样做的:
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方法中忘记了,可能会导致问题。我也想避免反射仅仅是为了复制一个对象。
有什么更好的方法来实现这一点吗?
发布于 2015-04-01 15:38:01
典型的方法是在层次结构中的每个类中提供一个副本构造函数。例如:
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?
}这样,复制就发生在声明字段的类中。知道如何处理这些字段是最合适的;即使字段是私有的,它也绝对可以访问这些字段;当引入一个新字段时,您只需对同一个类进行更改,而不必对派生类进行更改。
它仍然有点丑陋,如果可能的话,我会避免它--但这取决于上下文。(有时使用组合而不是继承是前进的方向,但这肯定不是普遍正确的。)
https://stackoverflow.com/questions/29394914
复制相似问题