给定这些类:
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()
。
最佳答案
那是因为 Ford.Copy
未在基类上声明,因此在您转换 Ford
后不可访问到 Car
.
Ford.Copy
需要覆盖 Car.Copy
.
但是由于它的参数有不同的类型,它不能只覆盖基方法。
你需要的是参数化Car
- Car<TCar>
- 然后使用该类型参数来定义您的参数类型。然后每个子类将指定他们将复制的汽车类型。
这叫做 F-bound polymorphism .
public abstract class Car<TCar> where TCar : Car<TCar>
{
public virtual void Copy(TCar car)
{
// stuff //
}
}
public class Ford : Car<Ford>
{
public override void Copy(Ford updatedFord) {}
}
public class Holden : Car<Holden>
{
public override void Copy(Holden updatedHolden) { .. }
}
关于c# - 当我一直调用基类方法时如何调用我的具体类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32112563/