我有以下课程:
namespace ConsoleApplication8
{
public abstract class Employee
{
public virtual void Show()
{
Console.WriteLine("from base.");
}
}
public class Manager:Employee
{
public void Show()
{
Console.WriteLine("from child.");
}
}
class Program
{
static void Main(string[] args)
{
var man=new Manager();
man.Show();
Console.ReadKey();
}
}
}
在这里,我没有override
为Show()
派生类中的方法使用任何关键字,Manager
但是代码运行正常。那么override
关键字的实际用途是什么。
您没有覆盖原始方法,而是将其隐藏。这也是可能的,但由于失去多态性,可能无法满足您的期望或期望。我举一个例子:
static void Main(string[] args)
{
var man=new Manager();
man.Show();
Console.ReadKey();
}
这是您的代码,并输出“ From child”。使用“替代”时,以下内容还将输出“来自子代”。就您而言,它不会。
static void Main(string[] args)
{
var man=new Manager();
(man as Employee).Show();
Console.ReadKey();
}
这里提出了一个类似的问题:c#中的virtual关键字。虽然它没有解决override
关键字,但问题类别大致相同。
多态性何时有用的现实示例。我必须编写一个应用程序,以根据公司角色计算公司中所有员工的奖金。正如您所做的那样,我有一个带有public virtual double CalculateBonus();
方法的雇员类,并从中派生了几个类。
多态性的帮助,我要做的就是迭代List<Employee>
所有雇员,而不管他们的角色如何,并调用该CalculateBonus
方法,因为多态性确保始终调用覆盖。
如果没有覆盖,则奖金将全部为0,因为这是CalculateBonus
class中的默认结果Employee
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句