科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件关于:重写和重载

关于:重写和重载

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

简要介绍了什么是重载和重写,以及应用中的一些明显的需要注意的地方。

作者:机械羽翼 来源:CSDN 2008年3月22日

关键字: C C++ 重写 重载 Linux

  • 评论
  • 分享微博
  • 分享邮件

不严格的说:
    重载就是提供名称相同,参数不同的方法 。
    重写则是改变基类方法的行为。

.net类不支持静态方法重写和继承
    运算符是重载的静态方法,调用静态方法会锁住类级的独占锁。所以需要在多线程环境下执行大量计算的过程最好能不用操作符实现就别用操作符实现。比如Vector3这样的类型,直接把各种操作写在运算符方法里造成不比要的线程等待。折衷的方法是用实例方法实现,再由运算符调用实例方法。当然,性能最好的方案是直接调用实例方法,虽然看起来不那么优雅,但不有更好的清晰性。
    类似的例子还有Equal和operator ==。operator ==的行为是由当前引用的类型决定的,而Equal是由对象的最终类型决定的。具体来说,
 
    string     strStr = "abc";
    object    objStr = strStr;

    objStr.Equal方法是调用String的实现
    strStr.Equal方法同样是调用String的实现
   
    objStr.op_equality方法是调用Object的实现
    strStr.op_equality方法则是调用String的实现

.net的虚方法(可重写的方法),与标准C++在行为上的不同:
    在构造函数中调用虚方法:C++会调用已经执行到的那一级,因为vtbl是在构造函数中更新的。而C#始终会调用最终类型的实现。所以,在构造函数中最好别调用虚方法,因为最终实现此方法的类型的构造函数还没有被执行过,不能保证虚方法需要的资源都已适当的初始化过。
   
  

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章