覆盖函数c#

Kar*_*hik 7 c# virtual-functions

我只是试图使用控制台应用程序来掌握虚拟功能的概念.我注意到,一旦覆盖基类函数,返回baseclassname.functionname(参数)就会自动插入到我的函数体中.为什么会这样?

class advanc
{
    public virtual int  calc (int a , int b)
    {        
         return (a * b);        
    }        
}

class advn : advanc
{
     public override int calc(int a, int b)
     {
          //automatically inserted
          return base.calc(a, b);
      }        
}
Run Code Online (Sandbox Code Playgroud)

Wou*_*ort 12

通过覆盖虚函数,可以扩展基类的功能,然后调用基类来实现"基本功能".

如果要删除' return base.calc(a,b)'行,则不会执行基类代码.

如果要完全替换功能,这不是问题,但如果要扩展功能,则还应调用基类.

以下代码演示了这一点(只需将其放在控制台应用程序中)

class advanc
{
    public virtual int calc(int a, int b)
    {
        Console.WriteLine("Base function called");
        return (a * b);
    }
}

class advn : advanc
{
    public bool CallBase { get; set; }
    public override int calc(int a, int b)
    {
        Console.WriteLine("Override function called");

        if (CallBase)
        {
            return base.calc(a, b);
        }
        else
        {
            return a / b;
        }
    }
}

private static void Main()
{
    advn a = new advn();

    a.CallBase = true;
    int result = a.calc(10, 2);
    Console.WriteLine(result);

    a.CallBase = false;
    result = a.calc(10, 2);
    Console.WriteLine(result);
    Console.WriteLine("Ready");
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)


Zru*_*uty 5

Visual Studio试图猜测您想要什么,因此建议您使用此代码。

有时,被覆盖的函数扩展了基类函数的功能。在这种情况下,可以base.function在被覆盖的内部调用某个位置。