47.抽象类与接口
(1)抽象类与接口的感性认识
(2)抽象类:为做基类而生的“抽象类”与“开闭原则”。
抽象类的使用与类方法的重写有关,父类引用对象去调用子类的实例调用的是最新的同名方法。效果是一样的。但是在书写上有些区别。抽象类里面的虚方法是必须都要实现的。可以是在他的派生类里面都实现,可以是它的派生类的派生类里面实现。总之到最后虚方法都是要实现的。
《1》完整情况下的基类(父类)的书写格式
《2》抽象类:父类(基类)的书写格式
例子如下图:
(3)接口:方法访问级别必须是public(接口涉及到提供者以及访问者,这对双方必须是透明的,双方都是可以看见的。)
《1》接口的书写格式(完整版)(简略版)
接口里面的虚方法是必须都要实现的。可以是在他的子类里面都实现,可以是它的派生类的派生类里面实现。总之到最后虚方法都是要实现的。
如图是实例参考
《2》接口的访问级别示意图
(4)弱依赖的优势以及书写格式
(5)依赖翻转原则
利用最少的代码去实满足更多的调用者的调用。
(6)单元测试(测试代码的时候我们不能在源代码的基础上进行修改,因为源代码可能连接着不止一个,如果在源码上测试的话,很有可能导致其他代码报错。所以需要新建测试脚本,进行单独测试)
(7)接口隔离:根据方法的不同,可以适当的创建多个接口,每个接口的功能所包含的功能不同,这就使得我们在引入接口的时候,不至于接口的一些方法是无用的。
接口的隔离实例:接口的显示实现
(8)反射(.Net的功能),特性,依赖注入
特性使用:通过反射,拿到一个方法或一个类有没有被unfinished特性修饰。然后在判断是否去调用它。
《1》反射:以不变应万变(更松的耦合)
《2》反射与接口的结合
《3》反射与特性的结合
《4》依赖注入:此ID非彼ID,但没有彼ID就没有此ID;
优点:在优化代码,重新更改实例化等操作的时候,不需要一个一个去更改。