【问题标题】:Override the implementation of a base class such that calls from inherited base class functions also call the overidden function覆盖基类的实现,以便从继承的基类函数调用也调用被覆盖的函数
【发布时间】:2018-06-10 09:31:55
【问题描述】:

我必须重写基类中的函数,这样调用继承的函数也会导致调用这个被重写的函数而不是基实现。

class base_class
{
    string abc;
    public int get_1()
    {
        return 1;
    }
    public  int get_number()
    {
        return get_1()+1;
    }
}

class der_class : base_class
{
    public int get_1()
    {
        return 2;
    }
}
class Program
{
    static void Main(string[] args)
    {
        der_class abc = new der_class();
        Console.WriteLine(abc.get_number());
        Console.ReadKey();
    }
}

这将打印 2。如何通过使 get_number 调用覆盖的 get_1 来使输出为 3?

【问题讨论】:

  • 如果是c#而不是c++,则基类中的方法应标记为virtual,派生类中的方法应标记为overrides
  • 如果你想重写一个方法,那么你必须实际重写它,这需要@ZoharPeled 提到的关键字。您发布的代码应该会生成一个警告,告诉您您的方法隐藏了一个继承的成员,这与覆盖不同。

标签: c# oop inheritance polymorphism


【解决方案1】:

您需要override 关键字才能真正覆盖一个方法,否则您将其隐藏。

class der_class : base_class
{
    // note the word override here!
    public override int get_1()
    {
        return 2;
    }
}

另外,你需要在基类中创建方法virtual

class base_class
{
    string abc;
    // note the word virtual here!
    public virtual int get_1()
    {
        return 1;
    }
    public  int get_number()
    {
        return get_1()+1;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2012-02-05
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多