我有一个继承自基类的类;它几乎完全相同,不同的是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方法中被遗忘,可能会导致问题。我也想避免反射只是复制一个对象。
有没有更好的方法来实现这一目标?
答案 0 :(得分:3)
典型的方法是在层次结构中的每个类中提供复制构造函数。例如:
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?
}
这样复制发生在声明字段的类中。最好知道如何处理这些领域;即使他们是私人的,它肯定会访问到这些字段;当引入新字段时,您只需要在同一个类而不是派生类中进行更改。
它仍然有些难看,如果可能的话我会避免它 - 但这取决于背景。 (有时使用构图而不是继承是前进的方式,但这当然不是普遍适用的。)