文章类 软件类
好好999
 | 网站首页 | 网络编程语言 | 星座情感文章 | 特殊软件下载 | 站长工具天下 | 
html入门培训 网站服务器软件  化妆品经典广告词  雅芳化妆品价格  avon化妆品 net 入门培训 房地产销售广告 化妆品广告词 网络工程师
您现在的位置: 学习网 > 网络编程语言 > Asp.net > 正文
 | 网络编程语言首页 | Dreamweaver | Html | Asp | Jsp | Php | Asp.net | Css | Javascript | Access | Mysql | Mssql | Oracle | Domain | Mainframe |
最 新 热 门
普通文章通过四个方面全面剖析计算机安
普通文章ASP.NET中TreeView的运用
普通文章vb.net用来获取网页的类
普通文章给ASP.Net初学者的关于继承和多
普通文章asp.net生成静态页
普通文章ASP 3.0对ASP 2.0的改进
普通文章基于.net开发平台项目案例集锦
普通文章ToolBar的模样自己画(三)
普通文章[原创]XSL学习心得 - 制作图像
普通文章在ASP.NET中创建安全的web站点
 
频 道 推 荐
普通文章在Win 2003中配置ASP.net环境
普通文章关于Asp.Net中的编程实现下载
普通文章ASP.NET+MySQL数据库简明图示入
普通文章体验VS.NET 2005的winform新功
普通文章ASP.NET操作IIS中的虚拟目录
普通文章在IIS6.0下ASP .NET 的版本冲突
普通文章“智能”的让IE浏览器关闭时,
普通文章c# 正确读取存储中文,以及如何
普通文章.NET 和 Java 之碰撞火花:到底
普通文章ASP.NET DataGrid 控件深入研究
普通文章ASP.NET服务器控件编程之热身运
普通文章开心就贴(二)
普通文章开心就贴(三)
普通文章.NET之ASP Web Form快速入门(3
普通文章检测是否还有黑客代码的asp.ne
普通文章Windows.NET Server: IIS 6.0
普通文章用Asp.net实现基于XML的留言簿
普通文章第八章 编辑留言页的制作
普通文章Asp.net2.0的安裝與必要條件5/
普通文章NFramework开源AOP框架设计类图
 
频 道 推 广
 
手工打造运算符重载过程         ★★★
手工打造运算符重载过程
作者:佚名 文章来源:本站整理 更新时间: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] 下一页

 
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

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

    有事请点这里

    有事点这里

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