Visual C#2005中的匿名委托的实现

本文详细介绍了.NET平台下的委托技术,包括其基本概念、不同版本C#中委托的使用方式及特点,尤其聚焦于匿名委托如何捕获上下文变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

委托技术是.NET引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。
        首先,delegate中可以注册任意多个回调,在一个delegate被调用的时候,已经注册的过程将会被逐个调用。 
        其次,delegate允许注册一个对象的方法,而不像C++中指可以使用静态方法或者全局方法作为函数指针,提供了更多的灵活性,同时也暗示我们,delegate中按照某种方式保存了object的很多信息。

下面看看委托在C#1.1中的实现:
        public delegate void thisDelegate(int a); 
        public void Eample1() 
        { 
          thisDelegate testdel1 = new thisDelegate(outInt); 
          testdel1(12); 
        }

        public void outInt(int x) 
        { 
          Console.WriteLine("output x : {0}", x); 
        } 

        在C#2.0的匿名delegate中,我们甚至可以访问当前匿名委托的上下文变量。上面的例子在C#2.0中可以这么写:
        public void Eample1() 
        { 
          thisDelegate testdel1 = outInt; 
          testdel1(12); 
        } 
或者这么写也可以:
        delegate void thisDelegate2(int a); 
        public void Eample2() 
        { 
          int a = 12; 
          thisDelegate ev2 = delegate(ref int x) 
          { Console.WriteLine("output x : {0}", x); }; 
          ev2( ref a); 
        } 

        在C#1.1中,委托对于局部变量是没有除参数外的访问方式的,而在2.0中已经可以实现了,我们在看下面的例子:
        public static void  Eample3() 
        { 
          int a = 12; 
          int y = 32; 
          thisDeliete ev2 = delegate(ref int x) 
          { Console.WriteLine("output x + y : {0}", x + y); }; 
          ev2( ref a); 
        }
        在这个例子中,匿名函数中的内容x + y的值被正确的输出了,这样做有什么意义呢?实际上使用匿名委托最大的好处在于可以完整地克隆当前运行空间上下文的可用变量,我觉着这就是他的意义所在。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值