zoukankan      html  css  js  c++  java
  • 两种多态

    1)继承基类的多态

    class BaseClass
    {
           public virtual void DoSomething()
           {
           }
    }
    class SubClass
    {
           public override void DoSomething()
           {
           }
    }
    BaseClass bClass=new SubClass();
    
    bClass.DoSomething(); 

    这种方式利用子类重写基类的虚方法,体现了IS-A风格的多态。

    2)实现接口的多态

    interface IAble
    {
           void DoSomething();
    }
    class SubClass
    {
           public void DoSomething()
           {
           }
    }
    IAble subClass=new SubClass();
    subClass.DoSomething();

    这种方式具有更高的灵活性,体现了一种CAN-Do的风格的多态。

    .Net之所以能够使用多态,是因为.Net的动态绑定晚期绑定机制成就的。

    所谓动态绑定,就是在运行期通过检查虚拟方法表来确定是调用原始方法还是被覆写的方法

    比如说在此例中,编译器先检查subClass的声明类型是BaseClass或者IAble,然后看DoSomething方法是否被实现为虚方法。

    如果不是虚方法,则直接执行;

    如果是虚方法,则检查运行时类型SubClass类中对DoSomething方法的覆写或实现。如果有覆写,则调用此方法,如果没有,则向上寻找其父类,查找是否有覆写该方法,直到找到第一个覆写方法调用才结束。

    其中,虚方法是一词是广义的,包含在父类中的virtual方法和接口中的方法。

                                                                                                                                   --部分内容依据《你必须知道的.NET》一书P32-P33

                                                                                    

  • 相关阅读:
    Java异常:java.security.InvalidKeyException: Illegal key size
    sublime 3同步编辑线上代码
    ThinkPHP5浏览器关闭,继续执行php脚本
    jquery ui实现文字下拉联想
    layui实现多图上传,支持拖拽上传
    ThinkPHP5权限管理
    MySQL优化
    JS实现整个DIV里的字号整体放大或缩小
    JS实现点击图片放大、关闭效果
    sql 周岁计算
  • 原文地址:https://www.cnblogs.com/Benjamin/p/3385546.html
Copyright © 2011-2022 走看看