C#总是从基类调用一个基本方法

时间:2015-01-30 15:33:00

标签: c# override method-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财产(并返回1)?类似的东西:

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

2 个答案:

答案 0 :(得分:4)

您尝试将“真实”功能放在虚拟成员中,让非虚拟成员以非虚拟方式公开它。那......真的不会起作用。也就是说,你需要做的就是扭转这个概念:

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

    public int Foo()
    {
        return 1;
    }
}

“真实”定义位于非虚拟成员中,虚拟成员只是调用它。这可以确保您只编写一次功能,同时仍然以虚拟和非虚拟庄园展示它。

答案 1 :(得分:1)

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

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

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