匿名方法是在初始化委托时内联声明的方法
看下面的例子:
delegate int MyDel(int x);
public int Add20(int x)
{
return x + 20;
}
static void Main(string[] args)
{
MyDel myDel = Add20;
Console.WriteLine("Add20 = {0}", myDel(20));
Console.ReadKey();
}
这是一个 返回值为 int 型 参数 int 型的委托 MyDel,然后定义一个委托 myDel。这时候,我们要想给委托 myDel 赋值,就需要在函数外 定义一个函数 Add20。然后在调用,其实还可以利用匿名方法给委托赋值。看下面代码
delegate int MyDel(int x);
//public int Add20(int x)
//{
// return x + 20;
//}
static void Main(string[] args)
{
// MyDel myDel = Add20;
MyDel myDel = delegate (int x)
{
return x + 20;
};
Console.WriteLine("Add20 = {0}", myDel(20));
Console.ReadKey();
}
我们直接将 Add20 函数替换成由 匿名方法,匿名方法的返回值类型和参数类型要与委托的返回值类型和参数类型一致。当我们匿名方法体内不需要参数的时候,可以直接将参数类型省略掉。
MyDel myDel = delegate
{
return 20;
};
但是委托如果有out的话就不允许这样操作。
delegate int MyDel(int x);
// delegate int MyDel(out int x); 报错
static void Main(string[] args)
{
MyDel myDel = delegate
{
return 40;
};
Console.WriteLine("Add20 = {0}", myDel(20));
Console.ReadKey();
}
下面就是来讨论 Lambda 表达式了
Lambda 表达式就是简化了匿名方法。Lambda表达式就是将 delegate 换成了 “ =>”。
MyDel myDel = delegate(int x) { return x + 40; }; // 匿名方法
MyDel myDel1 = (int x) => { return x + 40; }; // Lambda 表达式
如果只有一个参数,可以直接省略“()”,同时也可以将 return 省略
MyDel myDel1 = x => x + 40; // Lambda 表达式
来看一个完整的例子:
delegate int MyDel(int x);
static void Main(string[] args)
{
MyDel myDel = x => x + 10;
Console.WriteLine("Add20 = {0}", myDel(20));
Console.ReadKey();
}
输入结果:
Add20 = 30