C#委托

一、什么是委托

    可以抽象的把委托理解为,就是把一个方法的引用给到一个变量。

在这里插入图片描述

二、委托的定义与使用

  1. 定义一个委托
    privat delegate void MyDelegate();//用MyDelegate声明的变量,能够指向这个变量的方法只能是无参数,无返回值的方法。这条语句执行完相当于新建了一个类。

  2. 给委托指定一个方法
    MyDelegate a=Test;//这是一种常见给委托赋值的方法
    MyDelegate a=new MyDelegate(Test);//通过构造函数进行赋值。
    private void Test(){
    console.WriteLine(“Test”);
    }
    /说明
    委托的方法可以是成员方法,也可以是静态方法。

  3. 调用委托
    a();//调用委托与调用方法一样。

三、C#预制的Action与Func类

  1. Action与Func的区别
    (1)Action 是用来指定一个没有参数没有返回值的方法。先可以这样理解可以通过泛型让他有参数。
    (2)Action<类型> 这样Action就可以指定没有返回值,有参数列表的方法了,如果多个参数Action<参数1,参数2…>
    (3)Func 如果不使用泛型的写法也是指定一个没有参数,没有返回值的方法。
    (4)Func<参数1,参数2,参数3…返回值> 只有最后一个是返回值,其他的都是参数。

  2. Action与Func的使用
    (1)Action的使用
    privte Action a=Text;//这里需要在方法的外部
    a(2);//方法的内部
    private void Test(int n){ console.WriteLine(n);}
    (2)Func的使用
    private Func<int,int,int> a=Test;//方法的外部
    a(2,4);
    private int Test(int i1,int i2){ return i1+i2;}

四、多播委托

(1)什么是多播委托:可以理解为一个委托类型的变量可以指定多个方法;
(2)使用多播委托:
private Action a;
a = Test;
a+=Test1;
a+=Test2;
a();//会输出Test、Test1、Test2的方法体。
private void Test(){
console.writeLine(“Test”);
}
private void Test1(){
console.writeLine(“Test1”);
}
private void Test2(){
console.writeLine(“Test2”);
}
/说明
如果不想要某个方法直接使用a-=Test;

五、匿名方法与lambda表达式

  1. 什么是匿名方法:顾名思义匿名方法就是没有名字的方法

  2. 创建一个匿名方法
    private Action a=delegate (){};

  3. 什么是lambda表达式: 可以理解为是一种可以替代匿名方法的

  4. 创建一个Lambda表达式
    private Func<int,int,int> a=(i1,i2)=>{return i1+i2;};

六、委托与事件的区别

  1. 什么是事件:可以理解为事件是一种特殊的委托,只能+=,-=,并且是能在类内被调用。这也是他也委托的区别
  2. 应用(观察者设计模式)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值