关键字override有用吗?

plottowan_1977 2009-10-23 02:21:43
感觉override关键字没啥用,有没有都一样重载,以MSDN上的一个例子

using System;
class TestOverride
{
public class Employee
{
public string name;

// Basepay is defined as protected, so that it may be
// accessed only by this class and derrived classes.
protected decimal basepay;

// Constructor to set the name and basepay values.
public Employee(string name, decimal basepay)
{
this.name = name;
this.basepay = basepay;
}

// Declared virtual so it can be overridden.
public virtual decimal CalculatePay()
{
return basepay;
}
}

// Derive a new class from Employee.
public class SalesEmployee : Employee
{
// New field that will affect the base pay.
private decimal salesbonus;

// The constructor calls the base-class version, and
// initializes the salesbonus field.
public SalesEmployee(string name, decimal basepay,
decimal salesbonus) : base(name, basepay)
{
this.salesbonus = salesbonus;
}

// Override the CalculatePay method
// to take bonus into account.
public override decimal CalculatePay()
{
return basepay + salesbonus;
}
}

static void Main()
{
// Create some new employees.
SalesEmployee employee1 = new SalesEmployee("Alice",
1000, 500);
Employee employee2 = new Employee("Bob", 1200);

Console.WriteLine("Employee " + employee1.name +
" earned: " + employee1.CalculatePay());
Console.WriteLine("Employee " + employee2.name +
" earned: " + employee2.CalculatePay());
}
}

运行结果是
Employee Alice earned: 1500
Employee Bob earned: 1200

如果,我把例子中CalculatePay函数前的override关键字都去掉
结果一样
说明在类SalesEmployee中已经重载了CalculatePay,那还要override做什么呢?
...全文
129 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
plottowan_1977 2009-10-23
  • 打赏
  • 举报
回复
有道理
yymycabbage 2009-10-23
  • 打赏
  • 举报
回复
override表示对继承方法的重写,可以实现多态。
lz把main代码改成如下,加关键字的结果还是一样,如果不加override的话,结果就是

Employee Alice earned: 1000
Employee Bob earned: 1200

不加override表示跟父类的同名函数脱离继承关系,没有办法实现多态。
c#设计的一个原则就是要求明确表达代码意图,所以要求重写的方法前面必须加override。


static void Main()
{
// Create some new employees.
Employee employee1 = new SalesEmployee("Alice",
1000, 500);
Employee employee2 = new Employee("Bob", 1200);

Console.WriteLine("Employee " + employee1.name +
" earned: " + employee1.CalculatePay());
Console.WriteLine("Employee " + employee2.name +
" earned: " + employee2.CalculatePay());
}
MaokFly 2009-10-23
  • 打赏
  • 举报
回复
重写
tkscascor 2009-10-23
  • 打赏
  • 举报
回复
根据实例的对象,来调用不同的方法.
tkscascor 2009-10-23
  • 打赏
  • 举报
回复
Employee employee2 = new Employee("Bob", 1200);
Employee employee1 = new SalesEmployee("Alice", 1000, 500);


兄台.. 多态是这样用的
qinxiaoasxzas 2009-10-23
  • 打赏
  • 举报
回复
要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。
flyfly2008 2009-10-23
  • 打赏
  • 举报
回复
应该有用吧!不过我不知道,过来等高手回答

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧