---------------------- Windows Phone 7手机开发、.Net培训、 期待与您交流!----------------------
什么是委托
定义
委托和类一样,是一种用户自定义类型。但类表示的是数据的集合,而委托保存的是一个或多个方法。
1.使用特定签名和返回类型声明一个新的委托类型。委托声明看上去和方法声明相似,只是没有实现块。
2.使用新的委托类型声明委托变量。
3.创建委托类型的对象,把它副职给委托变量。新的委托对象包括指向方法的引用,这个方法和第一步定义的签名一致。
4.为委托对象增加其他方法。这些方法必须与定义委托类型时的签名和返回值相同。
5.在代码中像调用方法一样调用委托。在调用委托的时候,器包含的多个方法会依次执行。
委托和类的定义过程如下:
委托和类的定义过程如下:
委托赋值和+=时,其实是新建了一个委托并赋值。
调用带返回值的多播委托:返回值是方法列表最后一个方法的返回值,前面的抛弃。
调用带ref参数 :参数值会根据方法列表的改变而改变。
演变
匿名方法允许在创建或为委托增加方法时包含小段内联代码---->C#2.0的匿名方法---->C#3.0中被lambda表达式替代。
从匿名方法到lambda表达式的演变:
一图解释C#委托的发展
匿名方法赋值给委托时,参数列表的省略:
lambda表达式语法:
事件Event
事件是被简化的针对特殊用途的委托。
- 事件是成员而不是类型,所以:
-
- 由于事件不是类型,不能使用对象创建表达式(new)来创建对象。
- 由于事件是成员:
-
- 它必须声明在类或结构中,和其他成员一样;
- 不能在一段可执行代码中声明事件。
- 事件成员被隐式自动初始化为null
标准事件的用法
GUI编程是事件驱动的,也就是说在程序运行时,它可以在任何时候被事件打断,比如按钮点击、按下按键或系统计时器。在这种情况发生时,程序需要处理事件然后继续其他事情。
推荐链接:
老赵:从.NET中委托写法的演变谈开去(上):委托与匿名方法
http://blog.zhaojie.me/2009/08/from-delegate-to-others.html
问题:delegate在.NET Framework1.1,2.0,3.5中各怎么写。
1. 首先:委托本身从没有变过,改变的一直是委托的「写法」。更确切地说,改变的只是「编译器」。
- .NET1.x中委托的写法
先声明一个委托类型SomeDelegate
再实例化一个委托 对象someDelegate
- .NET2.0中委托写法
改进地方:1, .NET2.0引入了泛型,委托也可以使用泛型
2, 声明后直接把方法赋值给委托,可以省略new实例化委托对象过程。
3, 可以使用闭包的匿名方法了。
- .NET3.5写法(Lambda表达式)
----------------------Windows Phone 7手机开发、.Net培训、 期待与您交流!----------------------