委托:(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)
NumChange c2 = AddNum;?
c2(20)
c# 内置的委托类型 Action<> 和 Func<>
? ? ? ? // Action<> 只能是委托无返回值的方法
? ? ? ? // Func<> 只能委托有返回值的方法
? ? ? ? // delegate 可以委托有返回值也可以委托无返回值的方法,包含了Action和Func的这两个的作用
委托可以把同一中类型的委托方法通过+=进行拼接 这个就是委托多播。\
?public delegate void MyAdd(int a, int b); // 定义委托类型
?
?MyAdd m1 = FistAdd; // m1 委托类型的变量,FirstAdd 委托方法
?m1 += SecondAdd; // m1目前有两个委托方法
?m1(10, 20);// FistAdd SecondAdd?
?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);