C# Class 类
参考:
https://www.w3cschool.cn/csharp/csharp-polymorphism.html
-
abstract 抽象
- 用关键字 abstract定义抽象类,用于提供接口的部分类的实现。只定义不实现。
- 当一个派生类继承自该抽象类时,实现即完成。
- 抽象类包含抽象方法,抽象方法可被派生类实现具体功能。
- 注意,下面是有关抽象类的一些规则:
- 不能创建一个抽象类的实例(抽象类没有具体实现)。
- 不能在一个抽象类外部声明一个抽象方法。
- 不能使用sealed定义为密封类(抽象类是用来继承的)。
-
Sealed 密封
- 类定义前面放置关键字sealed,将类声明为密封类,它不能被继承。
- 抽象类不能被声明为 sealed。
- 功能类似C++的final,final用于类表示类不能被继承,final用方法表示方法不能被重载。
-
virtual 虚函数
- 当基类中的方法需要在派生类中有不同的实现,可以使用virtual定义虚方法。
- 虚方法可以在不同的继承类中有不同的实现。对虚方法的调用是在运行时发生的。实现动态多态。
-
抽象方法和虚方法的区别
- 虚方法必须有实现部分,抽象方法没有实现部分。
- 抽象方法强制派生类覆盖的方法,否则派生类将不能被实例化。
- 抽象方法只能在抽象类中声明。如果类包含抽象方法,那么该类是抽象的,也必须声明类是抽象的。
- 抽象方法必须在派生类中重写,这一点和接口类似,虚方法不需要再派生类中重写。
- 总结:抽象方法是需要子类去实现的。虚方法是已经实现了的,可以被子类覆盖,也可以不覆盖,取决于需求。