一.什么委托:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。
-
- 在方法重载的上下文中,方法的签名不包括返回值
- 在委托的上下文中,方法的签名是包含返回值的
二.委托的定义:
委托(delegate)的声明的语法如下:
public delegate void Del(string parameter);
委托的使用方法:
public delegate void Del(string parameter);//声明委托 class Program { static void Main(string[] args) { Del del = WeiTuo; //指向具有相同签名的方法 del("ok"); //通过委托来进行调用 Console.ReadKey(); } public static void WeiTuo(string str)//与声明有相同的签名 { Console.WriteLine("委托"+str); } }
三.委托的属性概述:
- 类似于C和C++中的函数指针,但他们是类型安全的
- 允许将方法作为参数进行传递
- 可用于定义回调方法
- 委托类型派生自.NET Framework中的Delegate类,委托类型是封装的,不能派生出其他类
四.委托的简单演化过程:
public delegate void MyDel(); class Program { static void Main(string[] args) { MyDel del1 = new MyDel(WeiTuo); //大于等于C#1 MyDel del2 = WeiTuo; //大于等于C#2,上面的简化版 MyDel del3 = delegate() { Console.WriteLine("匿名方法委托"); }; MyDel del4 = () => { Console.WriteLine("lambda表达式"); }; del4(); Console.ReadKey(); } public static void WeiTuo() { Console.WriteLine("委托"); } }
五.泛型委托:
Action(无返回值泛型委托)
Func(有返回值泛型委托)
Func<int,bool>表示:int为输入参数,bool为返回值 Func<int,int,bool>表示:2个int为输入参数,一个bool为返回值
六.Lambda简介:
Lambda表达式,是一种简化的匿名函数。可以用于创建委托或表达式目录树。其次,也可以将Lambda表达式作为参数进行传递
匿名方法:
//定义委托
delegate void Add(int a,int b);
//实例委托,使用匿名方法
Add add = delegate(int a, int b)
{
Console.WriteLine(a + "+" + b + "=" + (a + b));
};
调用:
add(10,29);
Lambda的诞生:
Lambda表达式的语法基本形式:
基本形式:(输入参数)=>表达式
(输入参数)=>{表达式}
写法:
()=>true; X=>x==1; (X)=>x==1; (x,y)=>x==y;