• 接口实现的继承机制


    接口实现的继承机制

    一个类继承了它的基类提供的接口的实现:
    注意:如果不显式地重新实现接口,派生类就无法改变从基类中继承来的接口映射。

    using System;

    interface IControl
    {
        
    void Paint();
    }


    class Control:IControl
    {
        
    public void Paint() 
        

          Console.WriteLine(
    "Control invoke!"); 
        }

    }


    class TextBox:Control
    {
        
    new public void Paint() 
        

          Console.WriteLine(
    "TextBox invoke!"); 
        }

    }


    class Invoke
    {
        
    public static void Main()
        
    {
            Control c 
    = new Control();
            TextBox tb 
    = new TextBox();
            IControl ic 
    = c;
            IControl it 
    = tb;
            c.Paint(); 
    // invokes Control.Paint();
            tb.Paint(); // invokes TextBox.Paint();
            ic.Paint(); // invokes Control.Paint();
            it.Paint(); // invokes Control.Paint();
        }

    }


    但是,当一个interface方法被映射到类中的一个虚方法时,派生类就可以重载这个虚方法,并且改变这个接口的实现:

    interface IControl
    {
        
    void Paint();
    }


    class Control:IControl
    {
        
    public virtual void Paint() 
        
    {
          
        }

    }


    class TextBox:Control
    {
        
    public override void Paint() 
        
    {
          
        }

    }


    代码效果:
    Control c = new Control();
    TextBox tb = new TextBox();
    IControl ic = c;
    IControl it = tb;
    c.Paint(); // 调用Control.Paint();
    tb.Paint(); // 调用TextBox.Paint();
    ic.Paint(); // 调用Control.Paint();
    it.Paint(); // 调用TextBox.Paint();


    因为显式说明的接口成员不能被声明为虚的,因此无法重载显式说明的接口实现:
    注意:这时最好采用显式说明的接口实现来调用另一个方法,这个被调用的方法可以被声明为虚的,允许被派生类重载。

    interface IControl
    {
        
    void Paint();
    }


    class Control:IControl
    {
        
    void IControl.Paint() 
        
    {
          PaintControl();
        }

        
    protected virtual void PaintControl() 
        
    {
          
        }

    }


    class TextBox:Control
    {
        
    protected override void PaintControl() 
        
    {
          
        }

    }

    这里,从Control中派生的类可以通过重载PaintControl方法来具体实现IControl.Paint。




    引用自:
    http://www2.cnblogs.com/netfork/archive/2004/03/23/3930.html 


     

  • 相关阅读:
    Tiny模板引擎之开发工具
    Tiny框架应用实践之Tiny社区
    TINY框架:组件化的J2EE开发框架
    TinyRMI---RMI的封装、扩展及踩到的坑的解决
    新手如何入门
    从应用示例来认识Tiny框架
    图形化插件对Eclipse的版本要求
    可不可以在局域网编译TINY?
    批量创建的方法
    不在框架中,利用Django的models操作
  • 原文地址:https://www.cnblogs.com/xiaodi/p/139880.html
Copyright © 2020-2023  润新知