1,什么是抽象类
注意:1)抽象类在任何时候都绝不允许实例化的,(理解它:其中一个比较好理解的地方就是,如果抽象类中包含了抽象方法,由于抽象方法是虚拟的,没有方法体,那么如果允许实例化它,这在调用虚拟方法时,编译器并不知道这个方法到底怎么执行,其实,我们设计抽象类,只是纯粹的为了抽象,而不是实例化它,抽象方法比虚方法更抽象,至少虚方法还有一个默认的实现,而它只是一个约定,除此之外什么都没有)
2,适合使用抽象类
举个例子来说:
我的项目里面有飞机(Plane)、轮船(Ship)、人(Person),其中:业务需求就是人乘坐飞机或者轮船去某地
开始考虑时,我们很容易就联系到,Person使用的交通工具是未定的。
3,如何设计抽象类
抽象类的设计最根本的目的: 是在类的继承层次组织上的一个高度的抽象,并提供利于扩展到实现,并使用多态的方式来让系统具有柔性
1)正确设计构造函数
不要把构造函数设计成public或者protected internal, 当然这里我们会问:既然C#规范中已经限制了编译器是无法编译对抽象类的实例化,那这里对构造函数的说明是不是多此一举呢?(答案:不是,因为他其实还是完成了它本质的工作,即:一些初始化工作)再改造一下上面的例子
2)正确设计功能和扩展点
因为抽象类的设计目的就是扩展,那么扩展点的设计是很重要的