关于:重写和重载

王朝other·作者佚名  2006-12-12
宽屏版  字体: |||超大  

不严格的说:

重载就是提供名称相同,参数不同的方法 。

重写则是改变基类方法的行为。

.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#始终会调用最终类型的实现。所以,在构造函数中最好别调用虚方法,因为最终实现此方法的类型的构造函数还没有被执行过,不能保证虚方法需要的资源都已适当的初始化过。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有