您的位置:知识库 » .NET技术

C#中的接口

作者: 吕震宇  来源: 博客园  发布时间: 2009-02-27 13:56  阅读: 8364 次  推荐: 0   原文链接   [收藏]  
摘要:本文将通过以下四个案例来分析C#中的接口究竟是如何工作的。
[1] 公有方法实现接口方法
[2] 私有方法不能实现接口方法
[3] 实现专门的接口方法(1)
[4] 实现专门的接口方法(2)

3、实现专门的接口方法(1)

代码如下:

using System ;
interface IControl 
{
   void Paint();
}
public class EditBox: IControl 
{
   void Paint() 
   {
      Console.WriteLine("Pain method is called!");
   }
   void IControl.Paint() 
   {
      Console.WriteLine("IControl.Pain method is called!");
   }
   public void ShowPaint()
   {
      this.Paint();
      ((IControl)this).Paint();
   }
}
class Test 
{
   static void Main() 
   {
      EditBox editbox = new EditBox(); 
      editbox.ShowPaint();
      //editbox.Paint();
      ((IControl)editbox).Paint();
   }
}

EditBox类拥有一私有Paint方法,但这并不是接口方法的实现(上例已经分析过)。EditBox类中还包含了一“void IControl.Paint()”方法, 是该方法复写了接口的Paint方法,该方法是私有的(通过IL代码可以看出)。

注意:“void IControl.Paint()”前不能加任何的修饰限定符号,诸如public、private等,这在C#的语法中是不允许的。该方法反编译得到的IL代码如下:

.class public auto ansi beforefieldinit EditBox
      extends object
      implements IControl
{
      .......
      .method private hidebysig newslot virtual final instance void IControl.Paint() cil managed
      {
            .override IControl::Paint
      }
}

程序运行时内存中的镜像可简化表示为:

程序执行结果如下:

Pain method is called!
IControl.Pain method is called!
IControl.Pain method is called!

我们之所以可以通过((IControl)editbox).Paint()方法访问到代码是因为接口方法Paint是公有的。但是我们不能通过editbox.Paint()方法访问到代码是因为EditBox的Paint方法是私有的。 在EditBox内部,通过ShowPaint方法可以同时访问私有的Paint方法与接口IControl.Paint方法。

0
0
标签:CLR

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻