我有以下类(class):
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();
}
}
}
在这里,我没有为派生类 Manager
中的方法 Show()
使用任何 override
关键字,但代码运行正常.那么override
关键字的实际用途是什么。
最佳答案
你没有覆盖原来的方法,你是hiding它。这也是可能的,但可能不是你想要的或你期望的,因为你失去了 polymorphism .我举个例子:
static void Main(string[] args)
{
var man=new Manager();
man.Show();
Console.ReadKey();
}
这是您的代码并输出“From child”。下面,当使用“override”时,也会输出“From child”。在你的情况下它不会。
static void Main(string[] args)
{
var man=new Manager();
(man as Employee).Show();
Console.ReadKey();
}
此处提出了类似的问题:virtual keyword in c# .虽然它没有解决 override
关键字,问题类差不多。
多态性何时有用的真实例子。我必须编写一个应用程序来计算公司中所有 员工的奖金,基于他们的角色。和你一样,我有一个员工类(class) public virtual double CalculateBonus();
方法和从中派生的几个类。
多亏了多态性,我所要做的就是迭代 List<Employee>
所有员工,无论其角色如何,请调用 CalculateBonus
方法,因为多态性确保始终调用覆盖。
如果没有覆盖,奖金将全部为 0,因为这是 CalculateBonus
的默认结果在类里面Employee
.
关于c# - C# 中的重写关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406619/