第十五章 接口[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计

第十五章 接口

摘要:

接口的应用及完全限定名方式定义接口的应用。

一、 接口与继承

l C#支持单实现继承和多接口继承

l 接口中可以定义:事件、无参属性(属性)、含参属性(索引器);C#不允许接口定义任何静态成员(CLR却允许定义静态成员);CLR不允许接口定义实例字段和构造器。

l 缺省为public abstract 方法,但不可用任何修饰符进行修饰(包括public)

l 将值类型转换为接口类型(假设其实现了某个接口),则值类型被装箱为引用类型,以调用其中的接口方法。

实现接口继承或实现继承的原则:

l 存在IS-A关系使用实现继承,存在CAN-DO关系使用接口继承

l 实现继承可继承父类型的实现,由于接口中没有定义方法的实现,因此继承后必须实现方法

l 考虑到每个人对接口实现的不同,使用实现继承可同一部分功能的实现

l 为父类型添加方法可能不影响使用继承自该类型实现的用户,而为接口添加方法导致用户必须为新方法添加实现

二、 利用接口改变已装箱类型中的字段

实际上是将已装箱类型转型为接口类型,然后通过调用方法进行值改变。

因为对已装箱类型进行拆箱到原值类型将在堆栈上声称新的值类型,调用这个新的值类型的方法不能改变以装箱类型的值。

三、 实现多个有相同方法的接口

使用 接口名.方法名 的形式声明实现了那个接口的方法。成为 完全限定接口名,这样定义的方法被认为是私有方法,不能使用类型本身调用;当将类型转换为接口类型时,完全限定接口名定义的方法又变成一个公有方法。(比较奇特,也很有用);使用完全限定接口名定义的方法不能使用任何访问修饰符。

四、 显示接口成员实现

问题的提出:通常接口接受的参数为Object,这样的参数非强类型安全的,可能需要在我们自定义类型的接口实现中定义强类型安全的方法,同时也需要实现“接口合同”

问题解决:通过上面的完全限定接口名方式定义接口方法,可达到这样的效果。

优点:获得强类型支持,可在编译期发现类型不匹配问题,而不是到运行期。同时,调用自定义的方法不必进行装箱操作,提高了效率。

缺点:由于我们在类型中隐藏了接口实现(必须将转型为接口才能暴露出接口定义的方法),因此可能对使用造成不便,因此应该慎用该方法。

时间: 2024-05-19 17:07:04

第十五章 接口[《.net框架程序设计》读书笔记]的相关文章

.net 框架程序设计 读书笔记(一)---.net 平台构成

笔记|程序|设计 .net 平台构成 1 底层操操作系统 windows 由于Web服务和使用Web服务的应用程序仍然运行在计算机上,而且既然是计算机都 要有外设,所以我们仍然需要一个操作系统.. Windows添加了Xml支持.. Windows XP和Windows.net (现在改名为windows Server 2003 ) 所有版本都都 为服务驱动的世界提供最好的支持. 特别地windowsXp和Windows 2003 Server 集成了Microsoft .net Passpor

第十五章之(三)RTTI

前言:刚找到新工作,这两天忙着搬家,添加一些日用品,好方便日后使用,浪费了蛮多时间的.所以到现在才补上这一章节. 之前跳过了RTTI,去看下一部分的类型转换运算符,被dynamic_cast搞的很头晕(主要是因为没搞懂为什么用这个),只能回头补上这一节,这时才发现,这一节是不能跳过的. 另外,这小节说实话,蛮难理解的(主要是指其原理,和为什么要有dynamic_cast这个类型转换运算符),这里简单的来概括,就是让指针只有在能安全使用转换后的类方法的情况下,才会被强制转换. ----------

Scala程序设计读书笔记[1:5]

Scala程序设计: Java虚拟机多核编程实战 一直好奇什么样的语言能够不需要加锁解决线程同步问题,能够解决Twitter的性能问题,想了解什么是函数式编程.于是找工作的间隙看了这本书,扩展一下视野. Source Code: http://media.pragprog.com/titles/vsscala/code/vsscala-code.zip Scala Online Editor: URL: http://www.scala-tour.com/#/expression-and-val

javascript框架设计读书笔记之种子模块_javascript技巧

1.命名空间: js里面的命名空间就是使用对象的属性来扩展的.比如,用户定义一个A对象,A对象下面有B属性和C属性,同时B属性和C属性又是对象.因此A={B:{},C:{}},这时用户就可以在B对象和C对象中定义一样的方法,属性了.因此B和C就属于不同的命名空间.我们调用B,C对象里面的方法,就可以通过A.B.like(),A.C.like()调用了.当然A属于window对象中的属性. 但是有一种情况,比如:boke.jsp页面引入了jquery.js以及prototype.js(他们都会在w

JavaScript高级程序设计 读书笔记之八 Function类及闭包_javascript技巧

Function类 定义 Function类可以表示开发者定义的任何函数,用Function类直接创建函数的语法如下: var function_name=new Function(agrument1,agrument2,...,argumentN,function_body); 每个argument都是一个参数,最后一个参数是函数主体(要执行的代码). 示例: 复制代码 代码如下: function sayHi(sName,sMessage){ alert("Hello "+sNam

《Java 7并发编程实战手册》第五章Fork/Join框架

感谢人民邮电大学授权并发网发布此书样章,新书已上市,购买请进当当网 本章内容包含: 创建Fork/Join线程池 合并任务的结果 异步运行任务 在任务中抛出异常 取消任务 5.1 简介 通常,使用Java来开发一个简单的并发应用程序时,会创建一些Runnable对象,然后创建对应的Thread 对象来控制程序中这些线程的创建.执行以及线程的状态.自从Java 5开始引入了Executor和ExecutorService接口以及实现这两个接口的类(比如ThreadPoolExecutor)之后,使

第十五章-数据访问部件的应用及编程(一)(1)

在这一章里我们主要介绍Delphi的数据访问部件的层次结构.多部件之间的关系.部件的属性.方法.事件以及各部件的应用.这些部件包括: ● TSession部件 ● 数据集部件(TTable和TQuery) ● TDatasource部件 ● 字段对象TField ● 字段编辑器的使用 ● TReport部件和TBatchMove部件 我们对这些部件的属性.方法和事件进行一般性的描述,读者在实际使用Delphi开发应用程序时,还可以通过联机帮助获得有关部件更详细的信息. 15.1 Delphi数据

Flash基础理论课 第十五章 3D基础Ⅰ

返回"Flash基础理论课 - 目录" 前面我们做的一切都是二维的(有时只有一维),但是已经可以做出非常酷的东东了.现在,将它们带入到下一个等级. 创建 3D 图形总是那么另人兴奋.新加入的这个维度似乎将物体真正地带入到了生活中.如何在Flash 中实现 3D 在无数的书籍和教学软件中都有介绍.但是我不打算跳过这些内容,我们会很快地将所有基础的知识讲完.随后,将前面章节中讨论的运动效果放到三维空间中.说得详细些,将给大家介绍速度,加速度,摩擦力,反弹,屏幕环绕,缓动,弹性运动,坐标旋转

第十五章-数据访问部件的应用及编程(二)(4)

15.5.1 TDataSource部件的属性 TDataSource部件除了其他部件都拥有的Name属性和Tag属性之外,主要有下面几个属性: DataSet属性:该属性说明TDataSource部件从中获取数据的数据集的名字,它可以是TTable部件的名字,也可以是TQuery部件的名字,甚至还可以指定其他窗体内的数据集作为该属性的值,如在下面的程序中我们指定窗体Form2中的table1作为窗体Form1中的DataSource1的DataSet属性值: TForm1.Formcreate