//以下示例和说明都源于《visual c# 2005 技术内幕》
//匿名函数就是没有名字的函数,是专用于委托的函数。
using System;
using System.Collections.Generic;
using System.Text;
namespace 匿名方法
{
public delegate void DelegateClass();
public delegate void delegatec(out int param);
public delegate void ADelegate<T>(T tvalue);
class Program
{
static void Main(string[] args)
{
int m;
//定义了一个无签名的地匿名函数,该匿名方法的签名是从委托推导出来的。
//但它的返回类型必须和委托相同。
DelegateClass del = delegate
{
Console.WriteLine("Running anonyous method");
};
del();
//定义具有一个签名的匿名函数
delegatec dell = delegate(out int inner)
{
inner = 12;
Console.WriteLine(inner);
};
dell(out m);
//外部变量。 匿名方法可以对该方法定义的作用域的包含函数和类成员的局部变量进行引用。
//在匿名方法中使用的局部变量称为外部变量。
//一个被捕获的外部变量的生存周期与委托的生存周期相同
dell = MethodA();
dell(out m);
Console.WriteLine(m);
//范型匿名方法。匿名方法可以使用指定类或委托的范型参数,但是匿名方法不能定义新的范型参数和约束。
ADelegate<int> ad = delegate(int a) {
a = 10;
Console.WriteLine(a);
};
ad(m);
}
public static delegatec MethodA()
{
int local = 0;
return delegate(out int arg)//返回匿名方法
{
arg = ++local;//延长了局部变量local的生存周期
};
}
}
}
//注:匿名方法的限制:
//不要企图跳出一个匿名方法,
//不要在一个匿名方法中使用一个ref或者out类型的外部变量
//不要定义新的一般参数或约束
//不要将属性应用于匿名方法
//不要用-= 赋值运算符使用匿名方法
//不能是一个成员方法
//不能是一个不安全方法