C# 面向对象之接口相关概念
什么是接口What
使用关键字interface 创建的数据类型。
接口名建议用”I”开头,其后单词首字母大写 ISwitch,IFly,IRun,ICompareble
接口的特点 重点!
1》接口是抽象的,接口是一组行为的抽象。(接口中只有行为)
接口只关注行为,且不关注行为的实现,实现由实现类完成
接口不关注数据(接口中不能有字段)可以有:【方法,属性,索引器,事件】
2》接口是规范,定义一组对外的行为规范,要求它的实现类必须遵循
实现类必须实现接口的所有成员!一般以public实现
注意:接口中的抽象成员,不能加abstract,不能加访问修饰符,默认抽象默认公共!实现接口的方法不能加override.

接口的作用用途,什么时候使用接口
1.》扩展一个已有类的行为
比如:手机 已有5个功能,发明了1个新功能,新功能做成接口,新类:用原来的类继承接口, 接口为了更多的类复用
2》.提取不同类别的共性的行为,让这个行为实现最大限度的复用!
比如: 鸟/昆虫 有的会飞有的不会飞, 写一个飞的接口
老鹰:鸟,飞的接口
蝴蝶:昆虫,飞的接口
飞机:飞的接口
类继承接口也就是类实现接口 实现方式两种
- 隐式实现 常用 : public 没有接口名
- 显式实现 很少用
显式实现:在实现的成员前加接口名,并且不能加任何访问修饰符,默认为private
显式实现成员:只能通过接口类型的引用调用。
显示实现作用:
1》解决接口中的成员对实现类不适用的问题【很少用】
一定程度的避免了接口的污染! 无法彻底避免
如果写代码遵循了 设计原则:接口隔离原则,就不需要用显式实现
2》解决多接口实现时的二义性
接口隔离原则 (功能拆分)
尽量定义小而精的接口,少定义大而全的接口
小接口之间功能隔离,
实现类需要多个功能时可以选择多实现.或接口之间做继承
面向接口编程而非面向实现原则 (写一个类时从哪入手)
先做好一个好对外的接口(公有的方法),先思考为其他的组件提供什么功能,而不是去先思考功能的实现。
Framework常用接口
IComparable 常用 比较接口(比较器),使类型支持比大小的功能,提供了一个比较的方法,
IComparer 比较接口(比较器),提供比较的方法,常用于排序比较
IEnumerable 常用 枚举器,使类型支持简单迭代(foreach)
IEnumerator 枚举器, 支持MoveNext ,自己可以控制迭代的节奏
抽象类和接口比较:
相同:可以被继承不能实例化
不同1:抽象类中可以有实现【可以有字段,实现的方法,抽象方法】
接口中只有抽象的成员【方法,属性…】不能有任何实现
不同2:抽象类只能被单继承
接口可以被多继承【多实现】
关系:接口是特殊的抽象类【抽象类中都是抽象成员时 变成接口】
什么时候使用抽象类,接口?
需求分析时找角色;找共性时,找的共性中
1:有字段;有方法,方法中有些方法/有些行为,
不同子类可能具体实现不同,父类中的这个行为就没必要实现!!
这个行为需要写成抽象的,从而这个类也要变成抽象类
2:只有方法/只有行为,
所有这些行为不同的实现类具体实现不同,这些行为需要写成抽象的,从而这个数据类型要用接口表示。
需求分析设计注意
对象的特征一般用 字段 【私有】 属性
对象的行为一般用 方法
对象的行为只表达是什么,不表达怎么做 抽象方法