情况2:在基类中定义了virtual方法

时间:2022-03-07 04:14:05

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:抽象要领声明使用,是必需被派生类覆写的要领,抽象类就是用来被担任的;可以当作是没有实现体的虚要领;如果类中包罗抽象要领,那么类就必需界说为抽象类,岂论是否还包罗其他一般要领;抽象类不能有实体的。