当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 作为有关 C# 语言规范漫谈的继续,本月我们将讨论运算符重载的问题。
 

 

 ·一个数据操作底层类    »显示摘要«
    摘要: 我对这个类不是很满意,如果你有改进意见请联系我,不胜感激. 主要将对数据库的操作简单封装了一下 using system; using system.collections; using system.componentmodel; using system.data; using system.diagnostics; using system.configuration......
 ·c#下socket对象的beginreceive方法    »显示摘要«
    摘要: 到底是怎么回事?仅仅发生在我的机器上,修改了ip配置后放到别的机器上是没有任何问题的,可以很好的回调。难道我的机器有何异常?请教高手了! 某一线程下socket对象user.sock开始执行beginreceive语句: user.sock.beginreceive(user.buffer,0,user.buffersize,0,new system.asynccallb......


C#规范漫谈
作为有关 c# 语言规范漫谈的继续,本月我们将讨论运算符重载的问题.运算符重载(除非特别指明,否则本专栏的其余部分一律将其简称为“重载”)是指允许用户使用用户定义的类型编写表达式的能力.它允许用户定义的类型与预定义的类型具有相同的功能.

例如,通常需要编写类似于以下内容的代码,以将两个数字相加.很明显,sum 是两个数字之与. 【程序编程相关:使用HttpContext的User属性

【推荐阅读:Pygame接口应用·递归分形

int i = 5; 【扩展信息:一个通用的Datagrid导出Excel

int sum = i + j;

如果可以使用代表复数的用户定义的类型来编写相同类型的表达式,那当然是最好不过了:

complex i = 5;

complex sum = i + j;

运算符重载允许为用户定义的类型重载(即指定明确的含义)诸如“+”这样的运算符.如果不进行重载,则用户需要编写以下代码:

complex i = new complex(5);

complex sum = complex.add(i, j);

此代码可以很好地运行,但 complex 类型并不能象语言中的预定义类型那样发挥作用.

任何事情都有特定的时间与场所

运算符重载是一个容易引起误解的语言功能,而且编程人员对待它的态度也大相径庭.一些人认为:用户使用这一功能编写的程序将令人费解,而且它也不应归于编程语言.另一些人则认为它是一个很不错的功能,在任何地方都可以使用.

这两种观点既包含正确的成分,但也有欠妥之处.应该承认,运算符重载可能会导致编写出的程序令人费解,但根据我的经验,即使不使用运算符重载,也很可能编写出令人费解的代码.在某些情况下,不使用重载甚至会使代码更加令人费解.

那些不分场合.随意使用重载的人“确实”在生产令人费解的代码.

在语言中之所以使用重载,是为了在概念上对用户的类或结构进行简化.只有在有助于提高用户所写代码的可读性时,才能对运算符进行重载.请注意,我们所说的检验标准是“更清晰”,而不是“更简短”.运用了运算符重载的类几乎总是会使代码变得更简短,但并不能每次都使代码变得更清晰(即可读性更强).

为了说明这一点,我创建了多个重载示例.您需要仔细阅读这些代码,想一想哪个运算符进行了重载,重载的运算符执行了什么运算.
...   下一页
 ·ado.net系列quiz2关于分布式事务    »显示摘要«
    摘要: 问题: 关于分布式事务的例子: 数据库a 和数据库b 上各有一个bank 表 ( 实际情况下a 和 b 分别在不同的机器上,不同类型的数据库(支持dtc)) 表结构如下 bankaccount, amount a 数据库中的记录: a 1000 b 数据库中的数据 b 1000 为了测试方便,没有用 com+,而是直接在 web service 中测试。 代码如下: ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE