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

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


作者: 黎宇/yesky  &;nbsp来自:网络


                3、重新实现接口
 
    我们已经介绍过,派生类可以对基类中已经定义的成员方法进行重载。类似的概念引入到类对接口的实现中来,叫做接口的重实现(re-implementation)。继承了接口实现的类可以对接口进行重实现。这个接口要求是在类定义的基类列表中出现过的。对接口的重实现也必须严格地遵守首次实现接口的规则,派生的接口映射不会对为接口的重实现所建立的接口映射产生任何影响。
 
    下面的代码给出了接口重实现的例子:
 
  interface IControl {
   void Paint( ) ;
   class Control: IControl
   void IControl.Paint( ) {…}
   class MyControl: Control, IControl
   public void Paint( ) {}
  } 
 
    实际上就是:Control把IControl.Paint映射到了Control.IControl.Paint上,但这并不影响在MyControl中的重实现。在MyControl中的重实现中,IControl.Paint被映射到MyControl.Paint 之上。
 
    在接口的重实现时,继承而来的公有成员定义和继承而来的显式接口成员的定义参与到接口映射的过程。
 
  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 进行实现的代码…
  }
  }
 
    这里,对IDerived的重实现也同样实现了对IBase的重实现,把IBase.F 映射到了D.F。
    (2005-6-01:02:28)
 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 警告:持续变种木马正在发起农历新年攻势!
 您可能对 [C#] 的这些文章也感兴趣:
论C#变得越来越臃肿是不可避免的
查询IP所在区段(C#)
在C#中利用SharpZipLib进行文件的压缩和解压缩
C# - Append a host header by code in IIS
在C#中调用Microsoft.VisualBasic命名空间下的类型验证函数
使用泛型实现单例提供者(原创翻译)
C#2 anonymous methods
Master Pages: Tips, Tricks, and Traps
Microsoft .NET 框架资源基础
基于.Net平台应用程序唯一运行实例实现
.net Framework 2.0 专门提供了配置文件的操作
正确实现 IDisposable