委托通俗来讲就是一种引用类型。存储一个方法的
int a;a是整型 存储整型数字的。
1概念
委托:(delegate)类似于c语言的指针,委托是存有对某个方法的引用的一种引用类型变量,其实委托就是一种数据类型,存储一个方法的
2委托场景
委托一般用于事件或者回调函数(方法的参数),委托继承于System.delegate这个类
3如何使用委托
1声明委托 类似于声明一个变量 public delegate 方法返回值类型 委托名(参数1,参数2);
public delegate int A (string s); 定义一个带有一个参数的委托类型
2给委托赋值
public int Add(string a) { } 先声明一个与委托类型匹配的方法
A+=Add 赋值
3使用委托,
A() 进行使用
定义类型
public delegate int Num(int a);//委托类型 有参数返回值 变量
public delegate int NumCheng(int a);
public static List<string> s1=new List<string>();
定义与委托类型匹配的方法

给委托赋值
先通过new 构建委托对象 参数是赋值给委托的方法,不用带()
Num c1 = new Num(AddNum); c1就是委托类型的变量,值就是AddNum方法
调用委托方法
MessageBox.Show(""+c1(20));
2创建委托类型
NumCheng c2= ChengNum;赋值
MessageBox.Show(c2(20) + "");
MessageBox.Show(c2.Invoke(20) + "");invoke 调用方法
使用内置的委托
Action act = test;无返回值的不带参数的委托
Action<int> act = test;带一个参数的委托
Action<int, string> act = test;带两个参数的委托
无返回值方法
act(10,"张三");
有返回值的委托
Func<int,int>f1= test2;
f1(10);MessageBox.Show(f1.Invoke(10)+"");

C#内置的委托类型 Action<>和Func<>
Action<>只能是委托无返回值的方法
Func<>只能委托有返回值的方法
delegate 可以委托有返回值也可以委托无返回值的方法,包含了Action 和Func的这两个的作用
委托的多播
public delegate void MyAdd(int a, int b);定义委托类型
与委托匹配的方法

eg:按钮点击调用多个方法 多播的
this.button1.Click += new System.EventHandler(f1);多播,绑定多个方法
this.button1.Click += new System.EventHandler(f2);
创建委托变量 多播的效果 一个m1类型可以绑定多个委托方法;
MyAdd m1 = FistAdd; m1委托类型变量 FistAdd委托方法
m1 += SecondAdd; m1目前有两个委托方法
m1(10, 20);
两个多播方法结果如下:


委托作为函数的参数使用
传递三个参数
先把委托类型的方法赋值给一个变量,参数写成变量
MyC c1 = f1;Add(10,20,c1);
也可以直接把 第三个参数写成f1方法
Add(10, 20, f1);
也可以写成把函数写成与委托类型匹配的lambda表达式
Add(20, 30, (a, b) =>
{
MessageBox.Show(a+","+b);
});
public delegate void MyC(int a, int b);定义委托类型
f1方法
public void f1(int a,int b)
{
MessageBox.Show(a+","+b);
}
传递一个整数a 整数b 传递方法c c方法打印一句话 a和b的值
方法类型 delegate Action Func
MyC c是MyC委托类型的变量,也就是具有无返回值有参数的方法


委托作为另外一个方法的参数 使用lambda表达式进行传值
1定义普通方法,参数1是字符串,参数2是整型格式,参数3是一个方法(有返回值传递三个整数的方法)
Main去调用
2定义一个参数c的要求委托类型
public delegate int My(int a, int b, int c); 有参数和返回值
public delegate void Mu(); 无参数和无返回值
3如果不简写的话在下面定义与委托类型匹配的方法
如果简写的话再调用F1方法传递lambda表达式
调用F1方法直接传递lambda表达式 与委托类型匹配
F1方法中三个参数分别为"玩水",13,lambdabiaodashi如果简写的话再调用F1方法传递lambda表达式

总结
C#内置的委托类型 Action<>和Func<>
Action<>只能是委托无返回值的方法
Func<>只能委托有返回值的方法
delegate 可以委托有返回值也可以委托无返回值的方法,包含了Action 和Func的这两个的作用
声明委托 类似于声明一个变量 public delegate 方法返回值类型 委托名(参数1,参数2);
每天进步一点点 每日成长一点点

本文介绍了C#中的委托概念,包括其作用类似C语言指针,用于事件处理和回调,以及如何声明、赋值和使用委托,涉及Action和Func内置类型,多播功能,以及作为参数传递和Lambda表达式的应用。











1249

被折叠的 条评论
为什么被折叠?



