首页 > 解决方案 > 覆盖基类的实现,以便从继承的基类函数调用也调用被覆盖的函数

问题描述

我必须以这样一种方式覆盖基类中的函数,即调用继承的函数也会导致调用这个被覆盖的函数而不是基实现。

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#oopinheritancepolymorphism

解决方案


您需要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;
    }
}

推荐阅读