type
status
date
slug
summary
tags
category
icon
password
Property
Aug 14, 2023 11:57 AM
内容:接口 抽象类 SOLID 单元测试 反射
本节内容
什么是接口和抽象类
- 接口和抽象类都是“软件工程产物”
- 具体类→抽象类→接口:越来越抽象,内部实现的东西越来越少
- 抽象类是未完全实现逻辑的类(可以有字段和非public成员,他们代表了具体逻辑)
- 抽象类为复用而生:专门作为基类来使用,也具有解耦功能
- 封装确定的,开放不确定的,推迟到合适的子类中去实现
- 接口是完全未实现逻辑的“类”(“纯虚类”;只有函数成员;成员全部public,隐式)
- 接口为解耦而生:“高内聚,低耦合”,方便单元测试
- 接口是一个“协约”,早已为工业生产所熟知(有分工必有协作,有协作必有协约)
- 他们都不能实例化,只能用来声明变量、引用具体类(concrete class)的实例
抽象类
为做基类而生的“抽象类”与“开闭原则”
有抽象方法或其他抽象成员,类就成了抽象类
函数成员没有被完全实现的类
不允许实例化抽象类,两个用途:作为基类让别人派生,作为基类声明变量,引用子类的实例
抽象方法:纯虚方法
开闭原则:如果不是修bug,或者添加新的功能,不要去修改的类的代码,尤其是函数成员的代码。我们应该封装一些不变的,稳定的和确定的成员,把不确定的,有可能改变的成员修改为抽象成员,并且留给子类实现。
之前的实现方案,纯虚方法
改为抽象类实现,子类实现的时候也需要加override
抽象类不能直接被实例化
纯虚类的形式
换为接口interface的形式
抽象类:未完全实现
接口:完全未实现
- 作者:Kitety
- 链接:https://www.kitety.com/article/C-sharp-leraning-abstract-class-%20and-open-close-principle
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章