一、匿名方法
匿名方法本质上是一个传递给委托的代码块。匿名方法最大的优势在于它的简易性。在大多数场合,我们并不希望声明一个仅作为参数传递给委托的独立方法。此时,直接给委托传递一段代码要比先创建一个方法后再把该方法传递给委托简单得多。下面是一个简单的例子:
执行结果如下:
0
1
2
3
4
5
在Main()中创建一个名为count的CountIt委托,紧跟在delegate关键字后面的是传递给此委托的代码块。这个代码块就是在调用count时所执行的匿名方法。注意:代码块使用分号作为结尾!!
二、给匿名方法传递参数
可以给匿名方法传递一个或者多个参数,为此,必须在代码块的前面定义一个参数列表,看下面的例子:
执行结果如下:
0
1
2
3
0
1
2
3
4
5
注意,在创建匿名方法时参数列表是如何在delegate关键字之后被指定的。匿名方法中的代码可以访问参数end,就像在普通方法中一样。
三、从匿名方法中返回一个值
匿名方法可以具有返回值。返回值的类型必须与委托的返回值类型及兼容。看下面的例子:
执行结果:
0
1
2
3
Summation of 3 is 6
0
1
2
3
4
5
Summation of 5 is 15
四、在匿名方法中使用外部变量
位于匿名方法所在的作用于中的变量和参数统称为外部变量。匿名方法可以使用这些外部变量。当某个外部变量被匿名方法使用时,就说这个变量被捕获。被捕获的变量将一直存在知道垃圾收集器回收了捕获它的委托。因此,虽然局部变量会在包含它的快结束时正常终止,但如果局部变量被匿名方法使用,那么该变量将一直存在直到匿名方法结束。
下面的例子,创建的CountIt对象所使用的变量sum,是在counter所在的作用于而不是在匿名方法内声明的。因此,sum呗匿名方法捕获。sum在应用程结束之前不会被销毁。
运行结果:
0
1
2
3
Summation of 3 is 6
0
1
2
3
4
5
Summation of 5 is 21