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)
Visual Studio试图猜测您想要什么,因此建议您使用此代码。
有时,被覆盖的函数扩展了基类函数的功能。在这种情况下,可以base.function在被覆盖的内部调用某个位置。