abstract、interface、virtual、override、new 简要总结规整
interface和abstract类
接口和抽象类最本质的区别:抽象类是一个不完全的类,是对对象的抽象,而接口是一种行为规范。
类可以继承多个接口;类与类的继承,只能是继承一个。
实现接口的抽象类可以将接口方法映射到抽象方法上。抽象类必须为所有接口成员提供实现。
|
1
2 3 4 5 6 7 8 |
interface I
{ void M(); } abstract class C : I { public abstract void M(); } |
virtual 和 abstract
修饰:
virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。
abstract 修饰符可用于类、方法、属性、索引器和事件。abstract方法,只能用在抽象类中声明定义。
实现:
abstract,不能有具体的实现,必须在派生类中用override实现。
virtual,可以实现或不实现。
因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。 例如:public abstract void MyMethod();
virtual,修饰方法,必须有大括号 { }。例如:public virtualvoid MyMethod() { ... }
override 和 new 在派生类中的使用
两者可以用于方法、属性、索引器和事件。
基类中的方法,如果允许派生类重写,则必须增加virtual。
override 关键字重写基虚方法,使用 base 关键字调用基类方法。
new 关键字隐藏基类中的虚方法。
知识点参考:
https://www.cnblogs.com/zyj649261718/p/6256327.html
https://msdn.microsoft.com/zh-cn/library/6fawty39(v=vs.100).aspx
参考明文:
virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。
(1)virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现。
(2)virtual可以被子类重写,而abstract必须被子类重写。
(3)如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。
(4)无法创建abstract类的实例,只能被继承无法实例化。
浙公网安备 33010602011771号