【发布时间】:2015-08-20 07:54:40
【问题描述】:
鉴于这些类:
public abstract class Car
{
public void Copy(Car car)
{
// stuff //
}
}
public class Ford : Car
{
public void Copy(Ford updatedFord)
{
base.Copy(updatedFord);
// copy ford stuff //
}
}
public class Holden : Car
{
public void Copy(Holden updatedHolden) { .. }
}
这就是我想要做的......
public void TestMethod()
{
Car car1 = new Ford { Colour = "Red", StickerCount = 1 };
Car car2 = new Ford { Colour = "Blue", StickerCount = 666 };
car1.Copy(car2);
// I expect blue AND 666 to be copied. only Blue is.
}
Here's all the code in a .NET FIDDLE.
因此,在这种情况下,如果汽车是Ford 实例,则调用Ford 类上的Copy(..) 方法......而不是Car 实例上的复制方法。
我只是不确定如何在最具体的类上调用 Copy 方法(然后通过继承的层次结构调用 base.XXX()。
【问题讨论】:
-
制作
virtualCopy的AggreagateRoot方法并从继承的类中覆盖它。小提琴 => dotnetfiddle.net/NYKAyv -
@MitatKoyuncu 现在你在每个“关卡”中进行投射。例如。
Colour = ((Car)car).Colour;呃 -
在您的情况下,您有静态绑定,即编译时间,因为您的方法是非虚拟的。当您确定它们是
Ford时,为什么要将实例声明为Car? -
根据您的设计,可以将霍顿汽车复制到福特汽车。这是正确的设计吗?!
标签: c# .net inheritance