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 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 


     

  • 相关阅读:
    网络安全部门的漏洞扫描让你头痛不已么——PHP环境选它就可以了
    2009年系统架构设计师考试试题知识点整理(一)
    解决EasyUI DataGrid删除行失败的方法
    贝叶斯文本分类原理
    为什么要对博客进行机器自动分类
    《机器学习实战》 in python3.x
    网站分析数据收集方式详解
    ThinkPHP5项目目录规划实践
    NumPy基础:用于数组的文件输入输出
    NumPy基础:通用函数-快速的元素级数组函数
  • 原文地址:https://www.cnblogs.com/xiaodi/p/139880.html
Copyright © 2011-2022 走看看