使用关键字interface 创建的数据类型。
接口名建议用”I”开头,其后单词首字母大写 ISwitch,IFly,IRun,ICompareble
接口的特点
1接口是抽象的,接口是一组行为的抽象。(接口中只有行为)
接口只关注行为,且不关注行为的实现,实现由实现类完成
接口不关注数据(接口中不能有字段)
2接口是规范,定义一组对外的行为规范,要求它的实现类必须遵循
实现类必须实现接口的所有成员!
注意:
接口中的抽象成员,不能加abstract,
不能加访问修饰符
默认抽象默认公共!
实现接口的方法不能加override
也不能私有
接口的作用用途,什么时候使用接口
1.扩展一个已有类的行为 手机 5功能,发明了1个新功能
1)新功能更做成接口 为了更多的类复用!
2)新类:原来的类,接口
2.规范不同类型的行为,达到了不同类型在行为上是一致的
提取不同类别的共性的行为,让这个行为实现最大限度的复用!
鸟/昆虫 有的会飞有的不会飞
飞的接口
鸟 共性:腿 羽毛 【行为】吃 走
昆虫
老鹰:鸟,飞的接口
蝴蝶:昆虫,飞的接口
飞机:飞的接口
接口的语法特点
接口中不能包含字段,可以包含:行为【方法,属性,索引器,事件】
接口中的所有成员不能加任何访问修饰符,全部默认公有
接口中的所有成员不能有实现,全部默认抽象的
实现类实现接口用“:”与继承相同
实现类实现可以实现多个接口,且每个接口中所有的成员必须都实现
接口中的成员在实现类中以public的方式实现(除显式实现)
接口的引用可以指向实现类的对象 接口 obj=new 实现类(子类)()
接口的使用
继承:
1 类继承类 单继承 类名:类名1(只有一个爸爸)
2 类继承接口【类实现接口】 接口支持多继承=接口支持多实现
3 接口继承接口 【用的少,不能有实现】 多继承 接口1:接口2,接口3
4 结构(struct)可以实现接口,但不能继承【类】
接口与接口之间可继承,且可以多继承(可以不用在子类写父类的接口)
类与类是单继承,类与接口是多实现,接口与接口是多继承
类实现接口两种方式
1》 隐式实现 常用 : public
2》 显式实现 很少用
显式实现:在实现的成员前加接口名,并且不能加任何访问修饰符,默认为private
显式实现成员:只能通过接口类型的引用调用。
void InterFace1.Fun()
{}
作用:
1 解决接口中的成员对实现类不适用的问题 【很少用】
一定程度的避免了接口的污染! 无法彻底避免
如果写代码遵循了 设计原则:接口隔离原则(多些几个接口),就不需要用显式实现
2解决多接口实现时的二义性【用的 更少】
抽象类 接口
同:可以被继承不能实例化
不同1:抽象类中可以有实现【可以有字段,实现的方法,抽象方法】
接口中只有抽象的成员【方法,属性…】不能有任何实现
不同2:抽象类只能被单继承
接口可以被多继承【多实现】
关系:接口是特殊的抽象类【抽象类中都是抽象成员时 变成接口】
什么时候使用抽象类,接口?
需求 分析时找角色;找共性时
找的共性中
1:有字段;有方法,方法中有些方法/有些行为,
不同子类可能具体实现不同,
父类中的这个行为就没必要实现!!
这个行为需要写成抽象的,从而这个类也要变成抽象类
2:只有方法/只有行为,
所有这些行为不同的实现类具体实现不同,
这些行为需要写成抽象的,从而这个数据类型要用接口表示
需求分析设计
对象的特征 -字段 【私有】 属性
对象的行为 方法
对象的行为只表达是什么,不表达怎么做 抽象方法
Framework常用接口
IComparable 常用 比较接口(比较器),使类型支持比大小的功能
提供了一个比较的方法,很多数据类型需要比较的方法,实现IComparable接口!
IComparer 比较接口(比较器),提供比较的方法,常用于排序比较
IEnumerable 常用 枚举器,使类型支持简单迭代(foreach)
IEnumerator 枚举器, 支持MoveNext ,自己可以控制迭代的节奏
再这里补一句