18. 面向接口编程
1、面向接口编程:
面向接口编程也就是使用“接口”来 实现动态多态性。面向接口的编程方式是面向对象设计的一个原则。层和层之间通过接口依赖,下层不是直接给上层提供服务,而是定义一组接口供上层(派生类?)调用。
2、有什么作用?
答:实现系统代码级最大灵活与可扩展性的保证。
3、接口定义:
(1)接口泛指实体把自己提供给外界的一种抽象化对象,在 C# 中是完全抽象的一种约束,具体就是约束类的行为;
(2)命名规则:以 I 开头,动词+名词结尾;
(3)规则:接口可以弥补继承的单一性缺陷,接口只有方法、属性、索引和事件的声明。
4、接口编程的建议:
(1)面向抽象编程,使用抽象(接口、抽象类、父类)而不使用具体;
(2)编程时能使用接口就不使用抽象类,能使用抽象类就不使用类,能用父类的就不用子类;
(3)避免定义 “体积庞大的接口”、“多功能接口”;
(4)定义多个职责单一的接口进行组合使用。
5、抽象类和接口的区别
(1)接口只能包含抽象方法,抽象类可以包含普通方法。
(2)接口只能定义静态常量属性,抽象类既可以定义普通属性,也可以定义静态常量属性。
(3)接口不包含构造方法,抽象类里可以包含构造方法。
(4)抽象类不能被实例化,但不代表它不可以有构造函数,抽象类可以有构造函数,被继承类扩充
(5)接口是核心,定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。
(6)如果许多类实现了某个接口,那么每个都要用代码实现那些方法
(7)如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现。
(8)抽象类不能实例化,必须通过继承由派生类来实现其抽象方法。如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类。
所以,抽象类是为了简化接口的实现,他不仅提供了公共方法的实现,让你可以快速开发,又允许你的类完全可以自己实现所有的方法,不会出现紧耦合的问题。
6、抽象类和接口的使用
(1)抽象类适用于同一系列中,并且有需要继承的成员;?
(2)接口适用于不同系列的类具有相同的动作。?