委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。
-
- 在方法重载的上下文中,方法的签名不包括返回值
- 在委托的上下文中,方法的签名是包含返回值的
一.委托的定义:
委托(delegate)的声明的语法如下:
public delegate void Del(string parameter);
委托的使用方法:
public delegate void Del(string parameter);//声明委托View Code
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;