< 关于 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. VSLAM技术框架详述

    最早的SLAM雏形是在军事(核潜艇的海底定位)上的应用,主要传感器是军用雷达.SLAM技术发展到如今已经几十年,目前以激光雷达作为主传感器的SLAM技术比较稳定.可靠,仍然是主流的技术方案.但随着最近 ...

  2. C# 函数参数object sender, EventArgs e

    object sender:表示触发事件的控件对象EventArgs e:表示事件数据的类的基类 Windows程序有一个事件机制.用于处理用户事件. 在WinForm中我们经常需要给控件添加事件.例 ...

  3. C++_异常9-异常的注意事项

    一.先讨论异常被引发后,可能导致的问题 意外异常: 如果它是在带异常规范的函数中引发的,则必须与规范列表中的某种异常匹配,否则为意外异常.在默认情况下,这将导致程序异常终止(虽然C++11摒弃了异常规 ...

  4. 查找表set和map 349, 350

    两类查找问题: 1)查找有无: - 某个元素是否存在,通常使用set(集合) 2)查找对应关系(键值对应) - 某个元素出现了几次,map(字典) set和map都不允许里面的键值重复. 常见操作: ...

  5. POJ - 1948 二维01背包

    T了两发,DP方程很简单粗暴 dp[i][j][k]:用前i物品使得容量分别为j和k的背包恰好装满 背包的调用只需一次即可,第一次T就是每次check都丧心病狂地背包一次 对于sum的枚举,其实i j ...

  6. ali代码风格

    如下: <?xml version="1.0" encoding="UTF-8" standalone="no"?><pr ...

  7. encoding specified in XML prolog (UTF-8) is different from that specified in page directive (utf-8)

    myeclipse下启动项目后出现错误:encoding specified in XML prolog (UTF-8) is different from that specified in pag ...

  8. django学习笔记——搭建博客网站

    1. 配置环境,创建django工程 虚拟环境下建立Django工程,即创建一个包含python脚本文件和django配置文件的目录或者文件夹,其中manage.py是django的工程管理助手.(可 ...

  9. rancher初级(搭建+基本操作+web应用部署)

    Rancher搭建 首先rancher需要安装了docker的linux环境,我的系统版本为 在docker的基础上启动rancher服务器,Rancher 服务器是一个 Docker image,所 ...

  10. android点击桌面App图标activity启动流程

    1.点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求:2.system_server进程接收到请求后,向zygote进 ...