zoukankan      html  css  js  c++  java
  • 接口实现的继承机制

    一个类继承了它的基类提供的所有接口的实现。
    如果不显式地重新实现接口,派生类就无法改变从基类中继承来的接口映射。
    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 t = new TextBox();
            IControl ic = c;
            IControl it = t;
            c.Paint();  // invokes Control.Paint();
            t.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 t = new TextBox();
    IControl ic = c;
    IControl it = t;
    c.Paint();  // 调用Control.Paint();
    t.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。
  • 相关阅读:
    P4049 [JSOI2007]合金
    CF1073C Vasya and Robot
    输出100以内奇数,偶数,质数,合数的脚本
    取/etc/password文件最后一个单词的最后一个字符
    window下进程退出后自动重启
    如何让DOS命令在新窗口打开
    dos命令关闭所有dos窗口
    使用jps查看JVM进程信息
    windows .bat批处理实现进程监控确保程序运行
    经典博客4(六尺帐篷)
  • 原文地址:https://www.cnblogs.com/netfork/p/3930.html
Copyright © 2011-2022 走看看