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

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

  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( ) {}
}

  注意:接口的成员包括它自己定义的成员,而且包括该接口所有父接口定义的成员。在接口映射时,不仅要对接口定义体中显式定义的所有成员进行映射,而且要对隐式地从父接口那里继承来的所有接口成员进行映射。

  在进行接口映射时,还要注意下面两点:

  1、在决定由类中的哪个成员来实现接口成员时,类中显式说明的接口成员比其它成员优先实现。
  2、使用Private、protected和static修饰符的成员不能参与实现接口映射。例如:


 interface ICloneable {
  object Clone( ) ;
 }
 class C: ICloneable {
  object ICloneable.Clone( ) {…}
  public object Clone( ) {…}
 } 

  例子中成员ICloneable.Clone 称为接口ICloneable 的成员Clone 的实现者,因为它是显式说明的接口成员,比其它成员有着更高的优先权。

  如果一个类实现了两个或两个以上名字、类型和参数类型都相同的接口,那么类中的一个成员就可能实现所有这些接口成员:


 interface IControl {
  void Paint( ) ;
 }
 interface IForm {
  void Paint( ) ;
 }
 class Page: IControl, IForm {
  public void Paint( ) {…}
 } 

  这里,接口IControl和IForm的方法Paint都映射到了类Page中的Paint方法。当然也可以分别用显式的接口成员分别实现这两个方法: