C# —— 委托

发布时间:2024年01月16日

?一:?委托的概念

委托:(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);

文章来源:https://blog.csdn.net/lu2023_8_6/article/details/135609912
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。