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。
  • 相关阅读:
    如何一键部署项目&&代码自动更新
    Node服务端极速搭建 - nvmhome
    Node服务端极速搭建 -- nvmhome
    自动生成了一本ES6的书
    在linux中给你的应用做压力测试
    .NET 跨平台服务端资料
    CabArc to create or extract a cab file
    (转)什么时候要抛出异常?
    Sprint评审会议不是Sprint演示会议
    Sprint回顾大揭秘——“宝典”来了
  • 原文地址:https://www.cnblogs.com/netfork/p/3930.html
Copyright © 2011-2022 走看看