C#委托(delegate)与委托作为函数的参数使用

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

委托通俗来讲就是一种引用类型。存储一个方法的
 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);

                         

                                      每天进步一点点 每日成长一点点

                                       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值