Bootstrap

C# —— 委托

 一: 委托的概念

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

;