C# 面向对象之接口相关概念

什么是接口What

使用关键字interface 创建的数据类型。

接口名建议用”I”开头,其后单词首字母大写 ISwitch,IFly,IRun,ICompareble

接口的特点 重点!

1》接口是抽象的,接口是一组行为的抽象。(接口中只有行为)  
     接口只关注行为,且不关注行为的实现,实现由实现类完成
     接口不关注数据(接口中不能有字段)可以有:【方法,属性,索引器,事件】
2》接口是规范,定义一组对外的行为规范,要求它的实现类必须遵循
       实现类必须实现接口的所有成员!一般以public实现
  注意:接口中的抽象成员,不能加abstract,不能加访问修饰符,默认抽象默认公共!实现接口的方法不能加override.


 接口的作用用途,什么时候使用接口

1.》扩展一个已有类的行为  
比如:手机 已有5个功能,发明了1个新功能,新功能做成接口,新类:用原来的类继承接口, 接口为了更多的类复用              
2》.提取不同类别的共性的行为,让这个行为实现最大限度的复用!
  比如: 鸟/昆虫 有的会飞有的不会飞,      写一个飞的接口

             老鹰:鸟,飞的接口
             蝴蝶:昆虫,飞的接口
             飞机:飞的接口

继承接口也就是类实现接口   实现方式两种 

  1. 隐式实现 常用 : public 没有接口名

  1. 实现 很少用

显式实现:在实现的成员前加接口名,并且不能加任何访问修饰符,默认为private

显式实现成员:只能通过接口类型的引用调用。

     显示实现作用:

1》解决中的成员对实现类不适用的问题很少用】

一定程度的避免了接口的污染! 无法彻底避免

  如果写代码遵循了 设计原则:接口隔离原则,就不需要用实现

           2》解决多接口实现时的二义性

                   

接口隔离原则 (功能拆分)

尽量定义小而精的接口,少定义大而全的接口 

小接口之间功能隔离,

实现类需要多个功能时可以选择多实现.或接口之间做继承

向接口编程非面向实现原则 (写一个类时从入手)

先做好一个好对外的接口(公有的方法),先思考为其他的组件提供什么功能,而不是去先思考功能的实现。

Framework常用接口

     IComparable 常用 比较接口(比较器),使类型支持比大小的功能,提供了一个比较的方法,

      IComparer   比较接口(比较器),提供比较的方法,常用于排序比较

IEnumerable 常用 枚举器,使类型支持简单迭代(foreach)

IEnumerator 枚举器, 支持MoveNext ,自己可以控制迭代的节奏

抽象类和接口比较:

相同:可以被继承不能实例化

不同1:抽象类中可以有实现【可以有字段,实现的方法,抽象方法】

             接口中只有抽象的成员【方法,属性…】不能有任何实现

不同2:抽象类只能被单继承

           接口可以被多继承【多实现】

关系:接口是特殊的抽象类【抽象类中都是抽象成员时 变成接口

什么时候使用抽象类,接口

需求分析时找角色;找共性时,找的共性中  

1:有字段;有方法,方法中有些方法/有些行为

不同子类可能具体实现不同,父类中的这个行为就没必要实现!!

这个行为需要写成抽象的,从而这个类也要变成抽象类

       2:只有方法/只有行为

       所有这些行为不同的实现类具体实现不同,这些行为需要写成抽象的从而这个数据类型要用接口表示。

 

比如说一个需求中有 主角(Playerstatus)、小怪 (MonsterStatus )他们都属于角色(CharacterStatus),有共同的行为死亡(Dead) 还有共同的特征 。

比如说角色,门 ,墙很多物体都会受到伤害(Ondamage),有无生命提取出的共同的行为就是受到伤害,把受到伤害封装为接口。

需求分析设计注意

对象的特征一般用  字段 【私有】 属性

对象的行为一般用   方法

对象的行为只表达是什么,不表达怎么做 抽象方法

发布了152 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40229737/article/details/104019307