【C#学习】27抽象类与开闭原则

什么是SOLID?

【SOLID】是5个面向对象设计原则的首字母组合,它们分别是:

(1)Single Responsibility Principle(SRP) ——单一职责原则

(2)Open Close Principle(OCP)——开放关闭原则

(3)Liskov Subsititution Principle(LSP)——里氏替换原则

(4)Interface Segreguation Principle(ISP)——接口隔离原则

(5)Dependency Inversion Principle(DIP)——依赖反转原则

这5个设计原则孕育出了几十种设计模式,设计模式是基于基本原则的更固定更高阶的用法

为做【基类】而生的【抽象类】

  • 抽象方法:被"abstract"所修饰,只有返回值,方法名和参数列表,而没有方法体的方法,就是抽象方法

如果一个类中含有抽象成员,那么这个类也就成了抽象类,必须用’abstract"修饰,否则编译器会报错

//抽象类
abstract class Vehicle
{
	abstract public void Run();  //抽象方法
}
  • 所以对抽象类可做如下定义:
    抽象类就是:函数成员未被完全实现的类;也就是说,抽象类中可以有若干个函数成员,但至少有一个函数成员,是未被实现的(被"abstract"修饰)

    扫描二维码关注公众号,回复: 8823408 查看本文章
  • 而且,抽象类中未被实现的函数成员,其访问级别不能为"private",因为在子类中要将其实现

  • 编译器不允许实例化抽象类,可以说:抽象类就是为做基类而生的,它的作用是:
    (1)作为基类,在派生类中实现没有被实现的函数成员
    (2)用基类类型的变量引用派生类类型的实例(多态)

  • 抽象类唯一能做的事情,就是给别的类当基类,以基类类型来声明变量,并引用那些已经完全实现了它的抽象成员的子类类型的实例,表现多态

开闭原则

【如果不是为了修复bug或添加功能,闲着没事儿别老去修改一个类的代码,特别是该类当中的函数成员的代码——我们应该封装那些不变的,稳定的,固定的,确定的成员,而把那些不确定的,有可能改变的成员声明为抽象成员,并留给子类去实现

抽象类和开闭原则的应用

注意代码是如何一步步重构的
(1)变量v无法调用到 Run()方法,是因为在Vehicle类中并没有定义此方法
在这里插入图片描述

(2)糟糕的解决方法
在这里插入图片描述

(3)也可以利用重写
在这里插入图片描述

(4)更好的是将其写成抽象类
注意:子类实现父类未实现的抽象方法时,要加上 “override”
在这里插入图片描述

什么是接口?

有没有一个抽象类中的所有函数成员都是抽象成员?
当然有
在这里插入图片描述
一个纯抽象类/纯虚类,实际上就是接口
在这里插入图片描述

接口和抽象类的总结

在这里插入图片描述

发布了29 篇原创文章 · 获赞 3 · 访问量 929

猜你喜欢

转载自blog.csdn.net/weixin_44813932/article/details/104077129