您可以在这里快速查找:


 
您的位置: 编程学习 > asp.net教程 > 200509
文章分类

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02

Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

VB编程
2006: 02

Asp编程
2005: 11 12
2006: 01 02

C++/VC
2005: 10 11 12
2006: 01 02

Delphi
2005: 12
2006: 01 02

其它

 本文章适合所有读者

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

sayo

第十五章 接口

摘要:

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

 

一、             接口与继承

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

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

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

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

 

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

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

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

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

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

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

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

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

 

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

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

 

四、             显示接口成员实现

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

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

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

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