基于C#的接口基础教程之五(5)

基于C#的接口基础教程之五(5)


Author: 黎宇/yesky  &;nbspFrom:Internet


                4、映射接口
 
    类必须为在基类表中列出的所有接口的成员提供具体的实现。在类中定位接口成员的实现称之为接口映射(interface mapping )。
 
    映射,数学上表示一一对应的函数关系。接口映射的含义也是一样,接口通过类来实现,那么对于在接口中定义的每一个成员,都应该对应着类的一个成员来为它提供具体的实现。
 
    类的成员及其所映射的接口成员之间必须满足下列条件:
 
    1、如果A和B都是成员方法,那么A和B的名称、类型、形参表(包括参数个数和每一个参数的类型)都应该是一致的。
 
    2、如果A和B都是属性,那么A和B的名称、类型应当一致,而且A和B的访问器也是类似的。但如果A不是显式接口成员执行体,A允许增加自己的访问器。
 
    3、如果A和B都是时间那么A和B的名称、类型应当一致。
 
    4、如果A和B都是索引指示器,那么A和B的类型、形参表(包括参数个数和每一个参数的类型)应当一致。而且A和B的访问器也是类似的。但如果A不是显式接口成员执行体,A允许增加自己的访问器。
 
    那么,对于一个接口成员,怎样确定由哪一个类的成员来实现呢?即一个接口成员映射的是哪一个类的成员?在这里,我们叙述一下接口映射的过程。假设类C实现了一个接口IInterface,Member是接口IInterface中的一个成员,在定位由谁来实现接口成员Member,即Member的映射过程是这样的:
 
    1、如果C中存在着一个显式接口成员执行体,该执行体与接口IInterface 及其成员Member相对应,则由它来实现Member 成员。
 
    2、如果条件(1)不满足,且C中存在着一个非静态的公有成员,该成员与接口成员Member相对应,则由它来实现Member 成员。
 
    3、如果上述条件仍不满足,则在类C定义的基类列表中寻找一个C 的基类D,用D来代替C。
 
    4、重复步骤1-- 3 ,遍历C的所有直接基类和非直接基类,直到找到一个满足条件的类的成员。
 
    5、如果仍然没有找到,则报告错误。
 
    下面是一个调用基类方法来实现接口成员的例子。类Class2 实现了接口Interface1,类Class2 的基类Class1 的成员也参与了接口的映射,也就是说类Class2 在对接口Interface1进行实现时,使用了类Class1提供的成员方法F来实现接口Interface1的成员方法F:
 
  interface Interface1 {
   void F( ) ;
  }
  class Class1 {
   public void F( ) { }
   public void G( ) { }
  }
  class Class2: Class1, Interface1 {
   new public void G( ) {}
  }
 
    注意:接口的成员包括它自己定义的成员,而且包括该接口所有父接口定义的成员。在接口映射时,不仅要对接口定义体中显式定义的所有成员进行映射,而且要对隐式地从父接口那里继承来的所有接口成员进行映射。
    (2005-9-20:12:15)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [C#] 的这些文章也感兴趣:

C# 实现的多线程异步Socket数据包接收器框架
在新的平台上编程
C#锐利体验(3.1)
获取数据库中的所有表(C#)
VisualStudio.Net内幕(7)
C#基类应用--字符串处理类
Windows窗体控件开发示例:扩展TreeView
C#实现Windows 服务的制作、安装和删除
利用C#远程存取Access数据库
C#排序算法大全