第10讲:.NET中的接口使用方法与继承对比实现多态

多态是同一个行为具有多个不同表现形式或形态的能力。而且多态是为了扩展而生!它可以通过继承实现、也可以通过接口实现,多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为”一个接口,多个功能”。

多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

图片[1] - 第10讲:.NET中的接口使用方法与继承对比实现多态 - 登山亦有道

使用继承:

  • 父类类型作为方法返回值类型(实际上返回的是一个具体的子类对象)
  • 父类类型作为方法参数类型(实际传递的是具体的子类对象)

使用接口:

  • 接口作为方法返回值类型(实际上返回是一个接口实现类对象)
  • 接口类型作为方法参数类型(实际上传递的是一个接口实现类对象)

一、为什么要用接口?

接口:就是一个标准,一个规范。USB接口为例它有4根线(1根是电源5v、一个是地线、一个是接收、一个是发送),这个标准或者规范一旦确定是不会更改的。应用:我们可以按照这个规范,去生成需要的设备接口。

A:当我们开发一个软件的时候,可能很多时候,我们设计完一个对象后,并不需要马上考虑,或者我们也可能不知道这个对象具体怎么样去编写,我们只是知道的这个对象的行为(也就是知道他干什么,但是不知道怎么干)还

有一种情况,当我们做团队开发的时候,比如一个项目设计了10个模块,由10个小组完成。怎么做到各自做各自的呢?基于以上的问题,我们可以使用接口解决。

  • 第一、我们设计对象后,可以根据行为直接设计接口(接口就是只有方法规定,没有具体实现)
  • 第二、我们可以把相关的模块都抽象成接口,然后接口直接相互协作,最后不同开发组实现不同的模块,这些模块开发完毕后,项目也就自动集成了。

二、接口怎么使用?

通过实例测试。实例模拟:我们想设计一个人作为父类、然后有校长、教师….

思考:就是说校长和教师的共同行为,能不能都放到父类中?比如,校长和教师的演讲、讲课等这些行为,不见得非得放到人这个父类中,因为这些并不是人的共同特征。

父类:人类

校长:–>人类

教师:–>人类

教务:人类

后勤:人类

思考:如果我们把校长、教师这些演讲、讲课的行为都放到人类中,当我们设计教务、后勤人员类的时候,这些行为会自动延续给他们,这样是不合理的!因此我们始终要注意,父类一般只放共同的行为,对于部分子类的行为,不能全部放到父类中,因为后面扩展的时候,这些会自动的延续给子类,所以,我们可以把这部分抽象为接口。然后呢?谁具有这样的行为,谁实现接口。进行统一的关联。也就是说接口侧重于行为的规范、继承侧重于复用!

  1. 接口规定:必须以 I 开头,接口的方法都是没有实现的方法,方法不需要写public。
  2. 接口可以抽象方法,也可以抽象属性。关键字:interface
  3. 接口具有强制性,也就是一个类实现一个接口,就必须把接口的所有方法都实现!并且不能改变方法的签名

三、接口和抽象类的区别

1.接口侧重的是功能的封装,抽象类侧重的是代码的复用,虽然两者都可以实现多态,但是我们在扩展中,如果没有要继承的内容时,请直接使用接口。即使有要继承的内容,通常把公共内容放到父类中,然后需要多态的行为,放到接口中。

2.接口更简洁,使用更方便。在框架设计中,抽象的都会变成接口,而不是使用抽象类。

多态的基本原则依据:里氏替换原则。

四、系统接口的使用

接口分类:

【1】自定义接口,根据我们实际的项目开发需求,自己写接口。

【2】系统接口,也就是.NET平台已经封装好的,可以给我们直接使用的接口。

常见的系统接口:IList 当我们讲List的时候,有一个对象比较的接口?ICompare

五、接口在设计模式中的应用(重点学习)(待补充)

© 版权声明
THE END
喜欢就支持一下吧
点赞70赞赏 分享
评论 共4条
匿名的头像 - 登山亦有道
提交


匿名的头像 - 登山亦有道

昵称

在 WordPress 上使用 Sticker Heo 增添互动时的乐趣吧 !

取消
昵称表情代码图片
    • admin的头像 - 登山亦有道
      admin Windows Firefox 102.0
      • 晨岩的头像 - 登山亦有道
        晨岩 Windows Edge 105.0.1343.27