假设我们有以下类:
class A {
public virtual int Number { get { return 1; } }
public int Foo(){
return Number;
}
}
class B : A{
public override int Number { get { return 2; } }
}
如预期的那样,如果我在 B 类的实例上调用 Foo 方法,我将得到 2。是否可以更改 Foo 方法,使其始终使用基数 A.Number属性(property)(并返回1)?像这样的东西:
public int Foo(){
return A.Number;
}
最佳答案
您试图将“真实”功能放在虚拟成员中,并让非虚拟成员以非虚拟方式公开它。那是……真的行不通。也就是说,您需要做的就是颠倒这个概念:
class A
{
public virtual int Number { get { return Foo(); } }
public int Foo()
{
return 1;
}
}
“真实”定义在非虚拟成员中,虚拟成员只是调用它。这确保您只需编写一次功能,同时仍将其暴露在虚拟和非虚拟庄园中。
关于C# 总是从基类调用基方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239292/