< 关于 C# 中“接口”的一些小结 >

对于 C# 这样的不支持多重继承的语言,很好的体现的层次性,但是有些时候多重继承的确有一些用武之地。
 
比如,在 Stream 类 、 图形设备 Graphics 类 这两个我们常用的类来说,他们的实现都是 .NET 通过调用操作系统内部的一些功能来完成的
因而,在使用完它们之后,需要我们自己将其关闭,回收系统中的相关资源。
 
  不难发现,这两个类中都有一个相同的“功能”, 那就是 关闭(回收)操作,即我们常用的 Close 方法。
 
在传统的 C++ 中,我们或许可以写一个用来关闭回收的类,让这两个类都去继承,但是这样做未免有些违背了面向对象中的继承派生的思想内涵。
 
所以 在 .NET 里,加入了“接口(interface)”这一技术来解决这样的矛盾。
 
其实,接口就是完成了一些上述的类似 Stream 类 和 Graphics 类 中都有 Close 这样的关闭功能的一种功能上的规范统一;
 
让它们都 “套接上”名为 "IDisposable" 这个接口, 该接口中规定了 Close 方法的功能规范。那么套上这个接口的 Stream 类 和 Graphics 类 就必须实现 "IDisposable" 接口中规定的 Close 功能,从而实现了不同类之间没有继承关系但是有着功能上相类似的统一规范。
 
下面是一些在使用接口技术时的 注意点 :
 
1#、在需要表达不同的类型具有相同的功能规范时,可以使用接口。
 
2#、接口可以看作是极为抽象的类型,其内部没有任何实现,只有方法、属性的签名。
 
3#、接口主要表达功能的规范,任何类型,一旦确定与接口产生派生关系,被称为实现了接口。
 
4#、任何实现接口的类型(除了另一个接口继承本接口),必须通过合理的方式来实现其接口内部的全部功能条目。
 
5#、接口与抽象类:
 
  -- 1、相似之处在于:都不可以直接获得实例。
 
  -- 2、接口内部的所有功能全都是默认共有的,在代码中无需表达任何访问修饰符
 
** 任何一个接口都可以被多个类型实现,且任何一个类或结构都可以实现多个接口,任何一个接口多可以继承多个接口。
 
 
 
 

关于 C# 中接口的一些小结的更多相关文章

  1. Delphi中ClientDataSet的用法小结

    Delphi中ClientDataSet的用法小结 TClientDataSet控件继承自TDataSet,其数据存储文件格式扩展名为 .cds,是基于文件型数据存储和操作的控件.该控件封装了对数据进 ...

  2. 七、golang中接口、反射

    一.接口定义 1.定义 interface类型可以定义一组方法,但是这些不需要实现,并且interface不能包含任何变量 package main import ( "fmt" ...

  3. PHP面向对象学习五 类中接口的应用

    类中接口的应用 接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用   抽象类:1.类中至少有一个抽象方法.2.方法前需要加abstract 接口: 1.类中全部为抽象方法,抽象方法前不 ...

  4. 如何记录selenium自动化测试过程中接口的调用信息

    上一篇博客,我写了python自动化框架的一些知识和粗浅的看法,在上一篇中我也给自己提出一个需求:如果记录在测试过程中接口的调用情况?提出这个需求,我觉得是有意义的.你在测试过程中肯定会遇到一些莫名其 ...

  5. delphi中接口的委托和聚合

    Delphi的TRegistry注册表类 方法详解 Delphi的接口编程入门 delphi中接口的委托和聚合 2009-09-27 10:44:44|  分类: 默认分类 |  标签: |举报 |字 ...

  6. 转载 - java中接口的向上转型。和多态性

    发现一篇对接口总结很精简的文章 1.在java中接口就是一个完全抽象的类,跟抽象类一样不能产生对象,但是可以作为对象的引用,可以由其实现类向上转型,它就跟超类一样, 向上转型了,可以很好的利用接口,可 ...

  7. C#学习笔记(17)——C#中接口的作用

    说明(2017-7-17 23:50:48): 原文: 接口的作用 接口的作用(C#)(另一篇) C#接口是一个让很多初学C#者容易迷糊的东西,用起来好像很简单,定义接口,里面包含方法,但没有方法具体 ...

  8. C++中接口与实现分离的技术 ZZ

    最简单清晰的例子:http://www.cnblogs.com/maoye/archive/2010/03/19/1690183.html 接口与实现分离 为什么这样设计? 主要原因是保持接口的稳定, ...

  9. EntityFramework中几种操作小结

    目前项目中使用到的EntityFramework中几种操作小结,先标记下.没有详细介绍,后续有空的话再补充一些并完善一下. 列中加入RowVersion时间戳 public class Product ...

随机推荐

  1. 浅谈C#中的委托、事件与异步

    从刚接触c#编程到现在,差不多快有一年的时间了.在学习过程中,有很多地方始终似是而非,直到最近才弄明白. 本文将先介绍用法,后评断功能. 一.委托 基本用法: 1.声明一个委托类型.委托就像是‘类'一 ...

  2. springcloud微服务总结二 注册中心

    一:netflix和springcloud关系 netflix公司开源了很多组件,包括服务注册与发现(Netflix Eureka).断路器(Netflix Hystrix).负载均衡(Netflix ...

  3. .Net Core 使用swagger UI

    swagger UI 第一步:首先添加包Swashbuckle.AspNetCore (可通过微软添加包命令Install-Package 包名进行添加,也可以通过管理NuGet程序包进行添加) 第二 ...

  4. LeetCode153.寻找旋转排序数组中的最小值

    153.寻找旋转排序数组中的最小值 描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 请找出 ...

  5. ubuntu中安装kernel-devel

    kernel-devel is a RedHat and derivatives package. In Ubuntu you may need to install the linux-kernel ...

  6. PIE SDK栅格数据唯一值渲染

    1. 功能简介 栅格数据唯一值渲染,是以像元为单位,不同的像元值设置不同的颜色,从而达到唯一值显示的效果. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 实例化唯一值渲染对象 第二步 初始 ...

  7. PIE SDK热力图

      1.算法功能简介 热力图,也就热图或者热点图,它能以特殊高亮的的形式显示某一区域的等级的优越性.重要性或者某一区域类别的密度和变换趋势:例如百度地图热力图 是用不同颜色的区块叠加在地图上实时描述人 ...

  8. 第五次 Scrum Meeting

    第五次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/9 22:00 30min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.9) ...

  9. Prestashop使用心得

    如果对Prestashop好奇的小伙伴快点进来看看吧,我开始接触了Prestashop这个开源的系统,这个一个非常棒的电商系统.因为我对这个Prestashop系统完全没有了解,但是上网却看不到太多的 ...

  10. [Verilog] parameter

    parameter和localparam的作用范围均为本模块,区别在于前者可用于在实例化模块的时候进行参数的传递. 用已定义的参数对变量赋值时,按照补码的方式处理,若出现溢出的情况,则截取低位.