C# 总是从基础 class 调用基础方法

C# always call a base method from the base class

假设我们有以下 classes:

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 class 的实例上调用 Foo 方法,我将得到 2。是否可以更改 Foo 方法,使其始终使用基数 A.Number 属性(和 return 1)?类似于:

public int Foo(){
   return A.Number; 
}

您正在尝试将 "real" 功能放入虚拟成员中,并让非虚拟成员以非虚拟方式公开它。那是……真的行不通。也就是说,您需要做的就是颠倒这个概念:

class A
{
    public virtual int Number { get { return Foo(); } }

    public int Foo()
    {
        return 1;
    }
}

"real"定义在非虚拟成员中,虚拟成员简单调用即可。这确保您只需编写一次功能,同时仍将其暴露在虚拟和非虚拟庄园中。

您可以使用 "base" 来使用 class A 的方法和属性。

class B : A
    {
        public override int Number { get { return 2; } }

        public new int Foo()
        {
            return base.Number;
        }
    }