从法学的角度谈谈“接口”--基于C#

接口(interface),这是C#的基础之一,是实现多态的必要工具。

然而,由于中文中“接口”的多意性,使得我在学习的时候陷入了一个误区,大大困扰了我的学习进度。

因为我在学习这个知识时,第一反应的是下面这种接口:

看网上的视频,老师们首先举的例子也是这种。然而,这种举例是不恰当的。因为,这种接口英文是input/output,也就是所谓的I/O。顾名思义,这种接口的主要作用是传递输入和输出信息。不同的I/O实际上是规定了不同的连接方式和信息传播方式。

那该怎么理解C#中的接口呢?最直接的方法就是看看官方是怎么定义的。打开《C#语言规范》,第1.9节中是这么定义的:

            接口 (interface) 定义了一个可由类和结构实现的协定。接口可以包含方法、属性、事件和索引器。

            接口不提供它所定义的成员的实现 — 它仅指定实现该接口的类或结构必须提供的成员。

作为一个一个法学毕业的,看到协定,一下子就明白了这到底是怎么回事了。在法律上,协定和协议是同义词。所谓协议,它主要规定的是合同双方或者多方之间的权利义务关系。而合同本身除了文字表述,并不会自己生产出产品或者其它实质的东西。

再回过来看C#中接口的特性:“接口不提供它所定义的成员的实现 ”,这不就和合同只是一份文本一样么,什么具体的事都没干,只是写了一些条条框框。而继承、声明这个接口的类/方法则是这个合同的签订者。集成这个接口,意味着,这个类向大家说,它公开提供这个合同中规定的服务(方法、属性、事件和索引器)。至于怎么实现这些服务的,有这个类自己解决。而在一个类或者方法中声明一个接口,实质上是声明一个继承了这个接口的类,即这是在寻求一些服务,所有能提供这些服务的类都可能成为调用的目标。而调用者只要选出最符合要求的服务提供方来获取服务就好了。具体这个被调用的类内部是怎么实现的,调用者并不需要知道。

以上,就是我对接口的理解。

时间: 2024-10-12 22:03:25

从法学的角度谈谈“接口”--基于C#的相关文章

【NLP】基于机器学习角度谈谈CRF

基于机器学习角度谈谈CRF 作者:白宁超 2016年8月3日08:39:14 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有应用.本文源于笔者做语句识别序列标注过程中,对条件随机场的了解,逐步研究基于自然语言处理方面的应用.成文主要源于自然语言处理.机器学习.统计学习方法和部分网上资料对CRF介绍的相关的相关,最后进行大量研究整理汇总成体系知识.文章布局如下:第一节介绍CRF相关的基础统计知识:第二节介绍基于自然语言角

银行卡类别查询API接口-基于极核数据

银行卡类别查询根据银行卡号判断真伪.查询类型.logo.客服电话   1.    银行卡归属地查询 接口地址:http://api.data-ranking.com/bankcard 支持格式:JSON 请求方式:GET 请求示例:http://api.data-ranking.com/bankcard?cardid=6225885213928394&appkey=APPKEY 请求参数: 名称 类型 必填 说明 cardid string 是 需要查询的银行卡号 key string 是 应用

从JVM内存管理的角度谈谈JAVA类的静态方法和静态属性

在JVM中,内存分为两个部分,Stack(栈)和Heap(堆),这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JVM的内存分为两部分:Stack和Heap.(stack和heap都是位于RAM中的) stack(栈)是JVM的内存指令区.stack管理很简单,push一定长度字节的数据或者指令,stack指针压栈相应的字节位移:pop一定字节长度数据或者指令,stack指针弹栈.stack的速度很快,管理很简单,并

关于AngularJS 1.x 从Flex程序员角度谈谈我的一些看法(一)

用AngularJS开发了2个很小的项目,多少积累了点经验,这里稍微谈下我一个Flex程序员的角度对它的看法. 你可能会有疑问什么是AngularJS?为什么我们要用它?它有什么用 1:它是google开发的一套前台MVC开发框架,这个框架的健康度很好,社区完善,资料也好找 2:一般说到JS框架,我们第一个想到的就是JQuery.AngularJs其实和它的前驱者JQuery做着差不多的事情,都是对html元素进行动态操作. 两者最大不同之处在于理念,JQuery是操作Dom对象的一套强大工具,

常用快递查询API接口-基于极核数据

此接口支持顺丰.EMS.申通.圆通.韵达.汇通.中通.天天.德邦.全峰等主流快递公司 1.快递公司列表 ·        接口地址:http://api.data-ranking.com/express/company ·        支持格式:JSON ·        请求方式:GET ·        请求示例:http://api.data-ranking.com/express/company?appkey=APPKEY 请求参数: 名称 类型 必填 说明 key string 是

以计算机科学的角度谈谈科班出身和非科班出身的一些看法

在当今的计算机行业里面从事计算机软件,硬件等设计开发工作的人其实有相当一部分大学时所学的专业并不是计算机科学,我们在此暂且简单的把这个行业里面的人分为学习计算机专业的科班,以及其他非科班两类.本文意在简单讨论一下对于不同问题的想法,这两类人到底会有什么区别,无意触及任何人,所以请不要对号入座. 当然科班出身的也存在一部分没有好好学的,不在本文讨论之内,非科班出身的也有自学了相关的全部知识技术,而且理解的相当深入的人,那么本文也将这类人算成是科班出身的. 想写这篇文章已经很久了,因为看到了太多的人

从浏览器渲染的角度谈谈html标签的语义化

大家都看过报纸或者杂志的排版,里面最主要的一些概念,就是版面的分割,标题的分级等等,web页面作为一种信息展示的形式,其基本的排版形式是从报纸杂志等传统媒介借鉴过来的,看一看html一些常用的tag就可以知道,比如h1-h6,p,img等等. html的语义化从字面的意思来看,就是你选用的tag要尽可能的符合它适用的场景.为什么要语义化呢?可以从浏览器开始说起,报纸和杂志作为信息的载体是通过印刷机将其呈现在大众面前的,同理html是通过浏览器的界面将其展现在用户面前的.html页面展现在我们面前

《java入门第一季》之面向对象(谈谈接口)

软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的学习: /* 接口的特点: A:接口用关键字interface表示 interface 接口名 {} B:类(实现)接口用implements(执行,实现)表示 class 类名 implements 接口名 {} C:接口不能实例化,就是说不能凭空的创建对象 那么,接口如何实例化呢? 按照多态的方

从WM_DISPLAYCHANGE消息的角度谈谈分辨率

众所周知,WM_DISPLAYCHANGE是当Windows显示器分辨率改变之后发送给所有的窗口的消息.但是不知道你有没有想过,显示器的分辨率不是固定的吗?为什么会有这条消息呢? 这里就要说一下逻辑分辨率和物理(设备)分辨率了: 我们说某个品牌的显示器的分辨率为80DPI(Dots Per Inch),是指在显示器的有效显示范围内,显示器的的显像设备可以在每英寸荧光屏上产生80个光点.举个例子来说,一台14英寸的显示器(荧光屏对角线长度为14英寸),其点距为0.28mm,那么:显示器分辨率=25