abstract、interface、virtual、override、new 简要总结规整

interfaceabstract类

接口和抽象类最本质的区别:抽象类是一个不完全的类,是对对象的抽象,而接口是一种行为规范。

类可以继承多个接口;类与类的继承,只能是继承一个。

实现接口的抽象类可以将接口方法映射到抽象方法上。抽象类必须为所有接口成员提供实现。

 C# Code 
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()  { ... }

 

overridenew 在派生类中的使用

两者可以用于方法、属性、索引器和事件。

基类中的方法,如果允许派生类重写,则必须增加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类的实例,只能被继承无法实例化。

 

posted on 2018-04-28 09:42  765boy  阅读(114)  评论(0)    收藏  举报

导航