< 关于 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. centos配置免密登录

    一.准备工作 1.先准备两台centos机器.例如:192.168.1.100和192.168.1.101两台机器,配置101免密登录100 2.默认centos会自带ssh和stfp,机器未安装,请 ...

  2. redis incr自增指定的无限期 key 删除问题

    不得不说,最近在使用redis的incr的功能的时候,着实是踩了不少的坑啊! 前面我写的一篇文章里面,我提到通过incr产生的键在用普通的get的方式去获取的时候,是获取不到的,所以我不得不通过特殊的 ...

  3. JAVA GET 和 POST 的区别

    GET 和 POST 的区别 GET请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=val ...

  4. [Beta阶段]第一次Scrum Meeting

    Scrum Meeting博客目录 [Beta阶段]第一次Scrum Meeting 基本信息 名称 时间 地点 时长 第一次Scrum Meeting 19/04/29 大运村寝室6楼 70min ...

  5. Python闭包需要注意的问题

    定义   python中的闭包从表现形式上定义为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure),也就是说内层函数引用了外层函数 ...

  6. LeetCode162.寻找峰值

    162.寻找峰值 描述 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下 ...

  7. 论文阅读 | Polygon-RNN:Annotating Object Instances with a Polygon-RNN

    论文地址:https://arxiv.org/abs/1704.05548 项目地址:http://www.cs.toronto.edu/polyrnn 概述 Polygon-RNN是一篇收录于CVP ...

  8. H5常见问题 微信踩过得坑

    微信页面内 click事件 只在a链接的时候有效,如果是div或者span之类  一定要加上样式 cursor:pointer 点击事件才生效. <div style="cursor: ...

  9. 协程:gevent模块,遇到i/o自动切换任务 038

    协程 : gevent模块,遇到io自动切换任务 from gevent import monkey;monkey.patch_all() # 写在最上面 这样后面的所有阻塞就全部能够识别了 impo ...

  10. PIE SDK点元素的绘制

    1. 功能简介 在数据的处理中会用到点元素的绘制,目前PIE SDK支持IMarkerSymbol的点元素的绘制,MarkerSymbol对象是用于修饰点状对象的符号,它包括ArrowMarkerSy ...