from:https://www.cnblogs.com/zyj649261718/p/6256327.html
c# 中 Abstract和Virtual对照容易混淆,,都与担任有关,并且涉及override的使用。下面讨论一下二者的区别:
一、Virtual要领(虚要领)
virtual 关键字用于在基类中修饰要领。virtual的使用会有两种情况:
情况1:在基类中界说了virtual要领,但在派生类中没有重写该虚要领。那么在对派生类实例的挪用中,该虚要领使用的是基类界说的要领。
情况2:在基类中界说了virtual要领,然后在派生类中使用override重写该要领。那么在对派生类实例的挪用中,该虚要领使用的是派生重写的要领。
二、Abstract要领(抽象要领)
abstract关键字只能用在抽象类中修饰要领,并且没有具体的实现。抽象要领的实现必需在派生类中使用override关键字来实现。
接口和抽象类最素质的区别:抽象类是一个不完全的类,是对东西的抽象,而接口是一种行为规范。
三、关键字
Static:当一个要领被声明为Static时,这个要领是一个静态要领,编译器会在编译时保存这个要领的实现。也就是说,这个要领属于类,但是不属于任何成员,不管这个类的实例是否存在,它们城市存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被挪用。
Virtua:当一个要领被声明为Virtual时,它是一个虚拟要领,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的担任中非每每用,用来供给类要领的多态性撑持。
overrride:暗示重写 这个类是担任于Shape类
virtual,abstract是报告其它想担任于他的类 你可以重写我的这个要领或属性,否则不允许。
abstract:抽象要领声明使用,是必需被派生类覆写的要领,抽象类就是用来被担任的;可以当作是没有实现体的虚要领;如果类中包罗抽象要领,那么类就必需界说为抽象类,岂论是否还包罗其他一般要领;抽象类不能有实体的。