赛迪网 > IT技术 C/C++ > 文章
  IT资讯搜索
 
IT产品搜索
[程序开发][网管世界][网络安全][数据库技术]
[操作系统][嘉宾聊天·在线访谈][活动集锦]
[精彩专题][Symantec专区][订阅IT技术周刊]
[开发论坛][网管论坛][安全论坛][数据库论坛]
[操作系统论坛][Sybase专区][IBM dW技术专区]
[病毒求助][病毒与漏洞播报][文档·源码下载]

对C# 2.0中匿名方法的种种怀疑分析 (1)

发布时间:2006.01.10 10:26     来源:赛迪论坛    作者:Sabine

一、 简介

所有的方法都使用一个来自于相同集合的元素的子集。在C# 2.0中,可选元素集将会继续增长。从历史上看-除了C++内联方法之外-方法都要求有一个名字、一个返回类型和一个方法体。而且可选择地,方法可以使用存取修饰符和一个参数列表。在C# 2.0中,方法名已经从必需的变成了可选的。

C# 2.0(一般就代表.net)引入了匿名方法。一个匿名方法可以被用在任何使用代理且该代理被定义为内联的情况下,它不需要方法名,而具有可选的参数和一个方法体。

为了使用匿名方法,你需要了解什么是代理。因此,在我们详细讨论何时使用匿名方法以及匿名方法的局限性之前,先让我们简要地回顾一下代理。

二、 代理回顾

匿名方法对于声明和使用代理来说是一种压缩方式(如果你对什么是代理还有疑问,请继续阅读;否则,可以跳过下面的这一部分)。代理,作为一种指向函数签名的指针,在.NET语言之前的语言中就已存在。切记,在计算机中一切其实都是位和字节。通过引入函数指针技术,有可能动态地把一些未来的目前尚未知的函数赋给指针,并由此诞生了事件。

函数指针的基本使用方法是,可以把一个函数的地址赋给一个单一的指针。为了通过一个指针来调用该函数,程序员要对之进行检查以决定是否这个指针为null,然后间接地通过这个指针调用这个函数。总之,要使用指针,必须进行null检查,而现在"一个指针对应一个函数"作为一种限制也该到结束的时候了。

回顾一下来分析,代理会成为原始函数指针的下一个进化替代者。一个代理即是一个类,它对该指针进行了封装;隐含地,.NET中的代理是multicast代理。作为一个multicast代理仅仅意味着不再存在"一个函数对应一个指针"的限制,因为multicast代理类包含一个指针列表。包含一个内部列表意味着多于一个函数的地址可以被赋值给一个单一的代理。当该代理-你可以认为是"事件"-被激发或调用时,所有的内部列表函数被调用。

注意 在C#中,我们调用代理的方式就象从前我们调用方法以及调用所有的赋值函数一样;但是我们仍然能够进行null检查。在Visual Basic.NET中,null检查隐含在激活事件行为中。

在C#中,函数地址通过使用一个重载的+=操作符插入到一个列表中并且经由一个重载的-=操作符而被删除。C#还支持手工地定义添加和删除块;添加和删除对于代理恰似get和set对于属性。

在C# 1.0和C# 1.1中,典型情况下,我们把代理实例赋给事件属性。例如,在WinForms中,一个Button控件暴露一个Click事件。Click的代理类型是EventHandler。EventHandler是一个以对象和EventArgs为参数的方法。因此,我们可以用匹配代理EventHandler的签名的任何方法来初始化一个EventHandler对象并且把代理赋给Click。下面是该代码看上去的样子:

private void Form1_Load(object sender, EventArgs e)

{ button1.Click += new EventHandler(OnClick);}

private void OnClick(object sender, EventArgs e)

{ Debug.WriteLine("button1 clicked");}

因为WinForms的表单设计器和WebForms的页面设计器自动地添加代理绑定;所以,我们有可能不需要手工式地绑定代理而建立大量的代码。

1 2 3 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Java理论与实践:再谈Urban性能之传言 (11-15) · 专家教您如何在C语言中巧用正则表达式 (05-19)
· 编程初级班:C语言程序设计入门系列之二 (05-19) · 教您在C/C++中如何构造通用的对象链表 (05-17)
· 与C/C++指针相似的C#代表元及事件触发 (05-17) · 如何在Linux桌面上搭建C/C++IDE开发环境 (05-17)
· 初学者必备:教你理解复杂的C/C++声明 (05-13) · 编程秘籍篇:C语言高效编程的四大绝招 (05-13)
· 细述C/C++字符指针数组及指向指针的含义 (05-13) · 初学者编程入门:学习C++的最大难度 (05-12)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
  赛迪推荐  
  手机·资费 ·新品·导购·评测·手机资费·宽带
手机搜索  诺基亚 N73 MOTO Z6
  IT产品 ·笔记本·台式机·服务器·打印·投影
IT产品搜索 
  IT技术 ·开发·网管·安全·数据库·操作系统
  信息化 ·热点·专题·访谈·周刊·方案案例
[政务][电信][金融][农业][制造业][中小企业]
[CIO][ERP][协同][IT管理][中间件][电子商务]
[政策][地方][专家][评估][辞典][博客][社区]
· 专题:一路畅通构想曲——让出行不再遭遇堵车
· CIO工作亲历:企业ERP选型不能忽视"选人关"
· 综述:信息化建设给中国监狱带来的各种变化
· 金融业风险管理和法规遵从有五点需考虑的因素
· 保险业CIO关注:该如何建立统一高效的CRM体系
· 调查显示:多数CIO对IT规划仍存在困惑和误解
  博客·论坛 ·曾剑秋·项立刚·Java学习·网管