C# 总是从基类调用基方法

标签 c# overriding

假设我们有以下类:

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/

相关文章:

c# - 在非托管 C++ 项目中使用 C# COM -> 0x7697C41F (KernelBase.dll) 处的第一次异常

c# - 使用 IDataReader 或 SqlDataReader

c# - 我们如何以编程方式更改无线蓝牙 radio 电源管理 C#

python - 在 Python 中是否可以声明必须重写该方法?

python - Django : DiscoverRunner overriding raise error

c# - 委托(delegate)、操作和内存分配

c# - OneDrive SDK & 后台任务 WP8.1

jquery - 如何重写 JQuery 的 .show() 和 .hide() 以触发前后事件?

visual-c++ - 为什么以下代码不会覆盖 C++ CLI 中的基类属性?

c# - 为什么我不能覆盖我的接口(interface)方法?