日常收集C#接口知识(知识全面)

2019-12-30 11:28:58王旭


 using System ;
 interface IMethods {
  void F( ) ;
  void G( ) ;
  void H( ) ;
  void I( ) ;
 }
 class Base: IMethods {
  void IMethods.F( ) { }
  void IMethods.G( ) { }
  public void H( ) { }
  public void I( ) { }
 }
 class Derived: Base, IMethods {
  public void F( ) { }
  void IMethods.H( ) { }
 } 

  这里,接口IMethods在Derived中的实现把接口方法映射到了Derived.F,Base.IMethods.G, Derived.IMethods.H, 还有Base.I。前面我们说过,类在实现一个接口时,同时隐式地实现了该接口的所有父接口。同样,类在重实现一个接口时同时,隐式地重实现了该接口的所有父接口。


using System ;
interface IBase {
 void F( ) ;
}
interface IDerived: IBase {
 void G( ) ;
}
class C: IDerived {
 void IBase.F( ) {
 //对F 进行实现的代码…
}
void IDerived.G( ) {
 //对G 进行实现的代码…
}
}
class D: C, IDerived {
 public void F( ) {
 //对F 进行实现的代码…
}
public void G( ) {
 //对G 进行实现的代码… http://www.easck.com/roucheng/
}
} 

  这里,对IDerived的重实现也同样实现了对IBase的重实现,把IBase.F 映射到了D.F。

  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的映射过程是这样的: