gpt4 book ai didi

c# - 当我一直调用基类方法时如何调用我的具体类方法

转载 作者:行者123 更新时间:2023-11-30 13:06:15 26 4
gpt4 key购买 nike

给定这些类:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com