要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。

1. override 方法提供从基类继承的成员的新实现。通过 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签名。有关继承的信息,请参见继承。

不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的。

override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有相同的访问级别修饰符。

不能使用修饰符 new、static、virtual 或 abstract 来修改 override 方法。

重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的。

2. abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

抽象类具有以下特性:

  • 抽象类不能实例化。

  • 抽象类可以包含抽象方法和抽象访问器。

  • 不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。

  • 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。

在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。

抽象方法具有以下特性:

  • 抽象方法是隐式的虚方法。

  • 只允许在抽象类中使用抽象方法声明。

  • 因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。

  • 例如: public abstract void MyMethod();

  • 实现由一个重写方法override(C# 参考)提供,此重写方法是非抽象类的一个成员。

  • 在抽象方法声明中使用 static 或 virtual 修饰符是错误的。

  • 除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

    • 在静态属性上使用 abstract 修饰符是错误的。

    • 在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。

    抽象类必须为所有接口成员提供实现。

    实现接口的抽象类可以将接口方法映射到抽象方法上。例如:

    interface I {    void M();}abstract class C: I {    public abstract void M();}

3.virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。例如,此方法可被任何继承它的类重写。

调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。

默认情况下,方法是非虚拟的。不能重写非虚方法。

virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。

除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。

  • 在静态属性上使用 virtual 修饰符是错误的。

  • 通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。

转载于:https://www.cnblogs.com/allen0/p/5109411.html

【C#】override,Abstract,Virtual 介绍及区别--转载相关推荐

  1. 浅析C#中new、override、virtual关键字的区别

    OO思想现在已经在软件开发项目中广泛应用,其中最重要的一个特性就是继承,最近偶简单的复习了下在C#中涉及到继承这个特性时,所需要用到的关键字,其中有一些关键点,特地整理出来,方便大家查阅. 一.在C# ...

  2. c#中的interface abstract virtual override和new

    from:(http://hi.baidu.com/21tian/blog/item/aabfae6ed4a675de81cb4ab4.html) interface用来声明接口 1.只提供方法的规则 ...

  3. VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别.ziw

    2017年1月10日, 星期二 VMware网络连接模式-桥接.NAT以及仅主机模式的详细介绍和区别 在使用VMware Workstation(以下简称:VMware)创建虚拟机的过程中,配置虚拟机 ...

  4. MySQL数据库引擎介绍、区别、创建和性能测试的深入分析

    深入理解MySQL的数据库引擎的类型 作者: 字体:[增加 减小] 类型:转载 本篇文章是对MySQL的数据库引擎的类型进行了详细的分析介绍,需要的朋友参考下   你能用的数据库引擎取决于mysql在 ...

  5. .NET 的 WCF 和 WebService 有什么区别?(转载)

    .NET 的 WCF 和 WebService 有什么区别?(转载) [0]问题: WCF与 Web Service的区别是什么? 和ASP.NET Web Service有什么关系? WCF与ASP ...

  6. java 双等号(==) 与equals方法的介绍和区别

    java 双等号(==) 与equals方法的介绍和区别 1.基本数据类型与equals方法 == 用于比较基本数据类型时,比较的是值 ==用于比较引用数据类型时,比较的是地址 equals方法在Ob ...

  7. 25G SFP28 SR多模和LR单模光模块的介绍及区别

    25G SFP28光模块简单来说就是传输速率为25Gbps的光模块,主要用于25G以太网和100G(4x25Gbps)以太网中,能够以最节能的方式来满足数据中心日益增长的需求.因此在40G.100G等 ...

  8. postfix中recipient/client/sender/helo四者的区别转载

    postfix在main.cf中用下面四个做限制,那么这四者到底有什么区别? smtpd_recipient_restrictions smtpd_client_restrictions smtpd_ ...

  9. Win10各版本介绍及区别:

    Win10各版本介绍及区别: 1.Win10家庭版,主要是面向消费者和个人PC用户的电脑系统版本,适合个人或者家庭电脑用户推荐. 2.Win10专业版也是面向个人电脑用户,相比家庭版要稍微好些,并且W ...

最新文章

  1. java编写代码时易出错_归纳:编写Java程序最容易犯的21种错误
  2. node中的流的介绍(Stream)
  3. SpringBoot整合Freemarker+Mybatis
  4. java + httpclient +post请求(记录下)
  5. java createjpeg4_在linux下用java的JPEGCodec.createJPEGEncoder(bos)生成jpg图片问题
  6. qstring去掉特定字符_如何花式、批量且操作简单地处理字符?
  7. C语言二维数组中的指针问题
  8. Python办公自动化 - 3 Excel办公自动化
  9. C# 正则表达式 匹配IP地址
  10. 银河英雄传说旗舰名称考证—帝国军
  11. 购物车结算页面案例jQuery
  12. 权游谁将领盒饭?AI告诉你
  13. 微信开发者工具,调试公众号网页,控制台不显示,解决方案
  14. 目标检测(六):DSSD
  15. dbeaver的安装和使用
  16. python画猫和老鼠_利用python如何实现猫捉老鼠小游戏
  17. CMake的一些细节
  18. P2254 [NOI2005] 瑰丽华尔兹
  19. 通灵学院|游戏设计研习5:游戏机制的平衡★(4300字)
  20. 微信视频号怎么涨粉?我总结了5条经验_

热门文章

  1. 集中配置管理工具puppet安装使用
  2. Silverlight实例教程 - Navigation导航框架系列汇总
  3. win7多国语的安装说明
  4. 如果知道两点的经纬度 如何算两点之间的距离
  5. android广告平台刷量,数据显示:Android平台广告营收首超iOS
  6. LaTeX如何让两张图并排显示
  7. matlab把cell矩阵转换成能处理的数据
  8. python 读取音频文件(mp3,wav)时间的两种方法
  9. Python的pyroute2网络模块
  10. 1.4. Rosegarden