使用委托有以下几个步骤:
1,定义委托类型;
2,定义一个或多个符合委托类型要求的方法;
3,定义委托类型的变量,将签名相同的方法赋值给它;
4,将第二步定义的方法引用“挂接”到第三步定义的变量,以构建一个“委托调用列表”;
5,通过委托变量(新建立的变量)“间接”调用委托调用列表。
委托的匿名方法与Lambda表达式是为了简化上面的步骤:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
public delegate int AddDelegate(int i, int j);
class Program
{
//使用委托类型的参数
public static void invokeDelegate(AddDelegate del, int i, int j)
{
Console.WriteLine(del(i, j));
}
static void Main(string[] args)
{
//利用C#匿名方法特性直接给委托变量赋值
AddDelegate del = delegate(int i, int j)
{
return i + j;
};
//通过委托变量调用匿名方法
Console.WriteLine(del(100, 200));
//直接将匿名方法作为函数参数
invokeDelegate(delegate(int i, int j)
{
return i + j;
}, 100, 200);
Console.ReadKey();
}
}
}
“匿名方法”其实是方法定义与委托变量赋值两个步骤合在一起,从而省掉了单独定义一个方法的麻烦。
奇特的Lambda表达式:
Lanmbda表达式其实就是匿名方法的进一步简化,可以定义一个匿名函数,并将其值传给一个委托变量。
Lambda表达式的两种基本格式:
1,(input parameter)=>表达式
2,(input parameter)=>{语句1;语句2;·······}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
public delegate int AddDelegate(int i, int j);
class Program
{
static void Main(string[] args)
{
AddDelegate dele = delegate(int x, int y)//使用了匿名方法
{
return x + y;
};
AddDelegate dele1 = (x, y) => { return x + y; };//使用了Lambda表达式
//使用以上的两种方法是不需要单独写方法,而是为委托变量赋值时直接赋值方法体
Func<int, int, int> dele2 = (int x, int y) => { return x + y; };
Console.WriteLine(dele(3,4));
Console.WriteLine(dele1(3,4));
Console.WriteLine(dele2(3,4));
}
}
}
委托方法只有一个参数时Lambda表达式的括号可以不要,没有参数是只要括号,两个以上参数用逗号隔开(可以添加类型符号),方法返回值已有一个return时可以把return省略。