电脑设备 - 网络编程 文章类 软件类
好好999
 | 网站首页 | 网络编程语言 | 星座情感文章 | 特殊软件下载 | 站长工具天下 | 
百度热门搜索: kappa女员工  网络成瘾诊断标准  2009无线节目巡礼  央视女主播柴璐  东楼kappa女 08万千星辉颁奖典礼 刘雯雯 芙蓉姐姐自杀 更多...
您现在的位置: 学习网 > 网络编程语言 > Asp.net > 正文
 | 网络编程语言首页 | Dreamweaver | Html | Asp | Jsp | Php | Asp.net | Css | Javascript | Access | Mysql | Mssql | Oracle | Domain | Mainframe |
最 新 热 门
普通文章一种新的穿透防火墙的数据传输技术
普通文章.net2.0中新增的Substitution控件
普通文章.netWeb用户控件使用技巧
普通文章JustinIO的vb.NET版本!(串口操作
普通文章ASP.NET无限级分类的非递归实现(存
普通文章C#访问hotmail邮件
普通文章Community Server专题四:HttpHand
普通文章总结:ADO.NET在开发中的部分使用方
普通文章asp.net在线压缩和解压缩的实现
普通文章HOW TO:初始化共享变量
 
频 道 推 荐
普通文章把dataset作为一个xml文件传给客户
普通文章用.NET发起web请求时维持Session的
普通文章用JS脚本实现CheckBoxList只能选择
普通文章如何在VS.net2003下开发ARX2005
普通文章Visual Studio 2005中编译调试新功
普通文章ASP.NET摸拟键盘操作
普通文章C# 语言规范--1.11 枚举
普通文章ASP.Net项目出错处理方法汇总
普通文章ASP.NET控件开发之“代码紧凑原则”
普通文章asp.net 2.0里当readonly遇上enabl
普通文章通过外部网站返回得到内网外部IP
普通文章解决ASPX网页另类load两次
普通文章c#调用des64.dll进行加密解密
普通文章关于asp.net 1.0升级到asp.net 2.0
普通文章AJAX入门之使用for实现反射机制
普通文章ASP.NET 2.0站点地图搭建网站导航结
普通文章ASP.NET2.0数据库入门之SqlDataSou
普通文章.net 2.0中新增的nullable类型
普通文章ASP.NET页面中冻结DataGrid的列或头
普通文章.net开发投票机的思路
 
频 道 推 广
 
手工打造运算符重载过程           ★★★
手工打造运算符重载过程
作者:佚名 文章来源:本站整理 更新时间:2008-10-11 17:02:18

除了J#外,所有微软支持的.NET开发语言现在均支持运算符重载,因此纯粹为C#简化写法一样特性现已成为一种.NET开发中值得研究的一项重要语言特性。有人认为运算符重载其实就是简化写法,满足模拟基本类型操作的小功能,没有必要深究。但我觉得要多思考一层,为什么我们总希望模拟基本类型的操作?因为运算符重载能够将操作中缀化,能够自动推测静态过程的主体。

首先是操作中缀化。函数调用其实是一种前缀操作,函数(代表操作)总是在参数(代表操作数)之前写出。这样执行序列操作时运行的顺序其实和书写的顺序相反:

H(x,y)
G(H(x, y), z)
F(G(H(x, y), z), w)

序列运行的顺序是H->G->F但是却要反过来写,二元参数距离函数名越来越远。我们按照计算机执行的顺序思考,却要反过来写,多少有些不爽。成员函数扩展方法的写法则是将操作数(对象)写在前面:

x.H(y)
x.H(y).G(z)
x.H(y).G(z).F(w)

这样就将书写的顺序正过来了。这是一个甚好的方案,但是在不具备扩展方法的今天,有些事情是成员函数做不了的。比如在我的VBF里,我希望Functor<T, bool>可以进行And, Or等逻辑运算,而Functor<T, int>之间只能进行算术运算,Functor<T, string>之间只能进行连接运算,而且规则还不一样……但是成员函数没有根据类型参数选取不同重载的能力,也就是说.NET泛型无法进行特化操作。在.NET中具有编译期类型判定的机制只有两个:函数根据参数类型的重载和用户自定义隐式转换(相当于根据返回类型重载)。我们可以用Functor<,>类型的静态方法来实现根据类型参数不同的不同重载。但是静态方法不但要写全类型的名字,还是前缀操作,使用起来让人甚为不爽,这时就会发现,运算符重载是我们梦寐以求的东西。

Type.op_Operator(x, y) '静态方法
x op y '运算符写法

以上两种是等价的,可以看到运算符重载不仅可以通过x,y的类型推测静态方法的调用主体Type,还可以将操作转化为中缀写法——比后缀更适合表现二元运算。既然这么完美,我们能不能这样写呢?

Class Functor(Of T, U)
    Public Shared Operator And(x As Functor(Of T, Boolean), y As Functor(Of T, Boolean)) _
        As Functor(Of T, Boolean)
    End Operator
End Class

很遗憾,这样会编译错误。作为运算符重载过程,其参数至少有一个必须是定义运算符的类型。在编译器看来,必须是Functor(Of T, U),两个类型参数都必须是该泛型类定义的。就在我对此大感抱怨时,我偶然在C#编译器的源代码(见Rotor)中看到了它识别运算符的规则,其中并没有这些限制,只有两条规则——方法必须是静态的,特定名称的方法;方

[1] [2] 下一页

更多精彩:学习网->http://www.haohao888.com.cn 网络编程->http://www.51wlpc.com 电脑设备->http://www.xpmaster.cn
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 相 关 文 章
    Dreamweaver MX 2004 行为之设置文本
    Dreamweaver MX 2004 加密FTP
    防止新闻系统里产生垃圾图片的方法
    sql
    用中值排序基数法实现树状结构
    数据仓库能为你当前数据库体系的不足做些什么?
    如何取得MSSQL中的存储过程的返回值
    SQL Server访问ADO
    数据库设计的一点经验
    如何构建银行数据仓库
    质量和风险管理
    项目管理
    全文本检索的应用(2)
    全文本检索的应用(1)
    Microsoft SQL Server 7.0储存过程调试指南
    数据仓库之我见 (设计篇)
    不同字符集倒库的方法
    自动生成对表进行插入和更新的存储过程的存储过程
    利用SQL Server的全局临时表防止用户重复登录
    怎样注册OCX?
    | 设为首页 | 加入收藏 | 投搞邮箱 | 友情链接 | 网站公告 | 版权申明 | |
    魔兽世界私服 - 魔兽世界私服 - 魔兽世界私服 - 魔兽世界私服 - 劲舞团私服 - 劲舞团私服 - 劲舞团私服 - 劲舞团私服 - 劲舞团私服 - 劲舞团私服 - 劲舞团私服 - 完美世界私服 - 传奇私服 - 变态传奇私服 - 及时雨外挂 - 热血传奇私服

    有事请点这里

    有事点这里

    copyright: 2007-2008 haohao888.com.cn 粤ICP备08105098号