C#抽象类的用法介绍
脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用
假设有2个类,一个类是主力球员,一个类是替补球员。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class NormalPlayer { public int ID { get ; set ; } public string FirstName { get ; set ; } public string LastName { get ; set ; } public decimal WeekSalary { get ; set ; } public string GetFullName() { return this .FirstName + " " + this .LastName; } public decimal GetDaySalary() { return WeekSalary/7; } } public class SubPlayer { public int ID { get ; set ; } public string FirstName { get ; set ; } public string LastName { get ; set ; } public decimal MonthSalary { get ; set ; } public string GetFullName() { return this .FirstName + " " + this .LastName; } public decimal GetWeekSalary() { return MonthSalary/4; } } |
我们发现,NormalPlayer和SubPlayer有共同的属性和方法,当然也有不同的属性和方法。把2个类的共同部分抽象出一个基类。
1 2 3 4 5 6 7 8 9 10 11 | public class BasePlayer { public int ID { get ; set ; } public string FirstName { get ; set ; } public string LastName { get ; set ; } public string GetFullName() { return this .FirstName + " " + this .LastName; } } |
然后让先前的2个类派生于这个基类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class NormalPlayer: BasePlayer { public decimal WeekSalary { get ; set ; } public decimal GetDaySalary() { return WeekSalary/7; } } public class SubPlayer : BasePlayer { public decimal MonthSalary { get ; set ; } public decimal GetWeekSalary() { return MonthSalary/4; } } |
接着,我们发现NormalPlayer和SubPlayer计算日薪和周薪的方法也可以抽象出来,作为虚方法放到基类中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class BasePlayer { public int ID { get ; set ; } public string FirstName { get ; set ; } public string LastName { get ; set ; } public string GetFullName() { return this .FirstName + " " + this .LastName; } public virtual decimal GetSalary() { throw new NotImplementedException(); } } |
在NormalPlayer和SubPlayer这2个派生类中,需要重写基类的虚方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class NormalPlayer: BasePlayer { public decimal WeekSalary { get ; set ; } //获取日薪 public override decimal GetSalary() { return WeekSalary / 7; } } public class SubPlayer : BasePlayer { public decimal MonthSalary { get ; set ; } //获取周薪 public override decimal GetSalary() { return MonthSalary / 4; } } |
但在实际情况中,BasePlayer只是一个抽象出来的类,我们并不希望实例化这个类。这时候,就可以把BasePlayer设计为abstract抽象类。同时,在抽象类中,提供一个计算薪水的抽象方法。一旦在基类中声明了没有方法体的抽象方法,所有派生于这个抽象类的类必须实现或重写基类中的抽象方法。
1 2 3 4 5 6 7 8 9 10 11 12 | public abstract class BasePlayer { public int ID { get ; set ; } public string FirstName { get ; set ; } public string LastName { get ; set ; } public string GetFullName() { return this .FirstName + " " + this .LastName; } public abstract decimal GetSalary(); } |
由此可见,当2个或多个类中有重复部分的时候,我们可以抽象出来一个基类,如果希望这个基类不能被实例化,就可以把这个基类设计成抽象类。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
相关文章
基于ASP.NET+easyUI框架实现图片上传功能(判断格式+即时浏览 )
这篇文章主要介绍了基于ASP.NET+easyUI框架实现图片上传功能的相关资料,重点在于如何判断格式,实现即时浏览,需要的朋友可以参考下2016-06-06Entity Framework生成DataBase First模式
本文详细讲解了Entity Framework生成DataBase First模式的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-03-03asp.net core集成ElasticSearch实现全文检索功能
索引是Elasticsearch中用于存储文档的容器,你可以使用Elasticsearch的REST API、官方客户端库(如NEST)或Kibana等工具来创建和管理索引,本文给大家介绍asp.net core集成ElasticSearch实现全文检索功能,感兴趣的朋友一起看看吧2024-08-08
最新评论