欢迎来到天天文库
浏览记录
ID:41033010
大小:74.00 KB
页数:11页
时间:2019-08-14
《全面剖析C#接口编程之实现接口 (1)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、全面剖析C#接口编程之实现接口(1)作者:佚名 日期:2009年11月03日 来源:本站原创 【字体:大中小】 我要评论(0)360编程教程网提示: 接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。在前面的文章中,我们已经对C#接口的概念,如何定义接口以 接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。在前面的文章中,我们已经对C#接口的概念,如何定义接口以及如何对接口进行访问等问题进行了详细的讨论。在这些知识的基
2、础上,本文我们将来了解实现接口的方法。显式实现接口成员为了实现接口,类可以定义显式接口成员执行体(Explicitinterfacememberimplementations)。显式接口成员执行体可以是一个方法、一个属性、一个事件或者是一个索引指示器的定义,定义与该成员对应的全权名应保持一致。usingSystem;interfaceICloneable{objectClone();}interfaceIComparable{intCompareTo(objectother);}classListEntry:IC
3、loneable,IComparable{objectICloneable.Clone(){…}intIComparable.CompareTo(objectother){…}}上面的代码中ICloneable.Clone和IComparable.CompareTo就是显式接口成员执行体。说明:·不能在方法调用、属性访问以及索引指示器访问中通过全权名访问显式接口成员执行体。事实上,显式接口成员执行体只能通过接口的实例,仅仅引用接口的成员名称来访问。·显式接口成员执行体不能使用任何访问限制符,也不能加上abstra
4、ct,virtual,override或static修饰符。·显式接口成员执行体和其他成员有着不同的访问方式。因为不能在方法调用、属性访问以及索引指示器访问中通过全权名访问,显式接口成员执行体在某种意义上是私有的。但它们又可以通过接口的实例访问,也具有一定的公有性质。·只有类在定义时,把接口名写在了基类列表中,而且类中定义的全权名、类型和返回类型都与显式接口成员执行体完全一致时,显式接口成员执行体才是有效的,例如:classShape:ICloneable{objectICloneable.Clone(){…}i
5、ntIComparable.CompareTo(objectother){…}}使用显式接口成员执行体通常有两个目的:·因为显式接口成员执行体不能通过类的实例进行访问,这就可以从公有接口中把接口的实现部分单独分离开。如果一个类只在内部使用该接口,而类的使用者不会直接使用到该接口,这种显式接口成员执行体就可以起到作用。·显式接口成员执行体避免了接口成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式接口成员执行体。如果没有显式接口成员执行体,那么对于名称和
6、返回类型不同的接口成员,类也无法进行实现。下面的定义是无效的,因为Shape定义时基类列表中没有出现接口IComparable。classShape:ICloneable{objectICloneable.Clone(){…}}classEllipse:Shape{objectICloneable.Clone(){…}}在Ellipse中定义ICloneable.Clone是错误的,因为Ellipse即使隐式地实现了接口ICloneable,ICloneable仍然没有显式地出现在Ellipse定义的基类列表中。
7、接口成员的全权名必须对应在接口中定义的成员。如下面的例子中,Paint的显式接口成员执行体必须写成IControl.Paint。usingSystem;interfaceIControl{voidPaint();}interfaceITextBox:IControl{voidSetText(stringtext);}classTextBox:ITextBox{voidIControl.Paint(){…}voidITextBox.SetText(stringtext){…}}实现接口的类可以显式实现该接口的成员。
8、当显式实现某成员时,不能通过类实例访问该成员,而只能通过该接口的实例访问该成员。显式接口实现还允许程序员继承共享相同成员名的两个接口,并为每个接口成员提供一个单独的实现。下面例子中同时以公制单位和英制单位显示框的尺寸。Box类继承IEnglishDimensions和IMetricDimensions两个接口,它们表示不同的度量衡系统。两个接口有相同的成员名Length和
此文档下载收益归作者所有