【C#】override,Abstract,Virtual 介绍及区别--转载
要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 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# 参考)提供,此重写方法是非抽象类的一个成员。
除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
在静态属性上使用 abstract 修饰符是错误的。
在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。
抽象类必须为所有接口成员提供实现。
实现接口的抽象类可以将接口方法映射到抽象方法上。例如:
interface I { void M();}abstract class C: I { public abstract void M();}
3.virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。例如,此方法可被任何继承它的类重写。
调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。
默认情况下,方法是非虚拟的。不能重写非虚方法。
virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。
除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。
在静态属性上使用 virtual 修饰符是错误的。
通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。
最新文章
- PowerDesigner PDM生成sql脚本时:表的名称和表里面的字段名称都有引号解决。。。
- AS3中 Event 类的target和currentTarget属性
- windows sdk编程 richedit创建,像十六进制编辑器一样显示文件
- 360路由器c301最新固件支持万能中继
- XSS初探
- python编码-2
- 在win2008中配置ServU
- mysql redo log
- C++结构体中sizeof(1)
- 一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC
- android国际化
- UWP中使用Composition API实现吸顶(2)
- 一、自动化平台搭建-python虚拟环境安装
- Drools规则引擎入门指南(三)——使用Docker部署Workbench
- Appium+java 获取元素状态
- 你不知道的javascript读书笔记3
- 一步步从Spring Framework装配掌握SpringBoot自动装配
- Centos7 安装单节点Torque PBS
- python使用UnboundMethodType修改类方法
- CentOS搭建VSFTP服务器
热门文章
- PAT甲 1012. The Best Rank (25) 2016-09-09 23:09 28人阅读 评论(0) 收藏
- 洛谷P1600 天天爱跑步(线段树合并)
- 通过FactoryBean方式来配置bean
- smarty-2014-02-28
- EBS-DBA 维护
- Toad 实现 SQL 优化
- SSH登录警告(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!)
- grunt管理js/css
- LeetCode150:Evaluate Reverse Polish Notation
- 设计模式之代理模式(Proxy Pattern)_远程代理解析