一: 委托的概念
委托:(delegate) 类似于c语言的指针,委托是存有对某个方法的引用的一种引用类型变量,其实委托就是一种
和数据类型,,存储一个方法的。 和int a =10是一个概念
二: 委托场景
委托一般用于事件或者回调函数(方法的参数),委托继承于System.delegate这个类
三: 使用委托
1声明委托 类似于声明一个变量 public delegate 方法返回值类型 委托名(参数1,参数2);
public delegate int A(sting s); 定义一个带有一个参数的委托类型
2 给委托赋值。
public int Add(string a) { } 先声明一个与委托类型匹配的方法
NumChange A= new NumChange(AddNum);
A+= Add 赋值
3 使用委托,
A()进行使用
四: 使用委托俩中形式
第一种
NumChange c1 = new NumChange ;// c1就是委托类型的变量,值就是AddNum方法
c1(20)
第二种 不适用new
NumChange c2 = AddNum;
c2(20)
五内置的委托类型
c# 内置的委托类型 Action<> 和 Func<>
// Action<> 只能是委托无返回值的方法
// Func<> 只能委托有返回值的方法
// delegate 可以委托有返回值也可以委托无返回值的方法,包含了Action和Func的这两个的作用
六: 多播
委托可以把同一中类型的委托方法通过+=进行拼接 这个就是委托多播。\
多播的实例:
public delegate void MyAdd(int a, int b); // 定义委托类型
1 与委托匹配的方法
2 创建委托变量 多播的效果 一个m1类型可以绑定多个委托方法;
MyAdd m1 = FistAdd; // m1 委托类型的变量,FirstAdd 委托方法
m1 += SecondAdd; // m1目前有两个委托方法
m1(10, 20);// FistAdd SecondAdd
3 之前按钮点击调用多个方法,多播的写法
this.button1.Click += new System.EventHandler(f1); // 多播,绑定多个方法
this.button1.Click += new System.EventHandler(f2);
七: 委托例子 作为函数的参数进行使用
1:定义一个普通方法,参数1是字符串,参数2是整型,参数3是一个方法(有返回值传递三个整数的方法)
2 定义一个参数c的要求委托类型
public delegate int My(int a, int b, int c);
3如果不简写的话。再下面定义一个与委托类型匹配的方法
如果简写的话再调用F1方法时候直接传递lambada表达式
public static int M1(int a,int b, int c)
{
return a + b + c;
}
F1("你好", 13,M1);
调用F1方法直接传递lambada表达式 与委托类型匹配
F1方法中三个参数分别为"你好",13,labada表达式
4 把c方法三个整型的数字加起来,与a b 进行拼接
把c调用,
int sum = c(10, 20, 30);
MessageBox.Show(a + ":," + b + ":," + sum);