C#--委托

简介

委托vs函数指针

函数指针:指向内存的位置,存放的就是一个内存地址。类型不安全。无法判断实际指向的是什么
委托:面向对象的函数引用,线程安全。

使用场景

当方法的参数是一个方法的时候。

自我理解

就是一个用来集中调用方法的方法集合。当然这个集合是有签名(返回值,参数..)约束。

声明委托

定义可以放在 类所能放在的位置:名称空间下 类的内部,外部 。private protect public 修饰。
使用关键字 delegate
例:delegate int getTotal(string word);
分析:声明和虚方法声明很像。
作用:上面的声明就想当于声明了一个“集合”里面只可以放 返回值是 int参数为string的方法。

使用委托

使用 + +=来添加方法 - -+ 删除
使用.Invoke(参数)/直接加上(参数) 来执行里面的所有方法
例:

//定义  是没有参数的所以添加也要没有参数 (签名)
private delegate string GetTotal();
static void Main(){
    string testWord="hello word";
    //注:添加的是方法的引用不是 调用方法所以不能加()
    GetTotal myFirstDelegate=new GetTotal(testWord.Trim);
    //也可以  GetTotal myFirstDelegate=testWord.Trim;
    //添加
    myFirstDelegate+=testWord.ToUpper;
    myFirstDelegate+=testWord.ToString;
    //调用
    myFirstDelegate();

}
...

注:当其中一个方法抛出异常就会停止下面的方法执行。所以可以使用手动迭代
 Delegate[] delegates = myFirstDelegate.GetInvocationList();
            foreach (Delegate dg in delegates){
                Console.Write(dg.DynamicInvoke(null));

}
匿名初始化(当不重复使用的时候可以简化书写)

GetTotal myFirstDelegate=delegate(){
return “wahaha”;
};

事件与委托的关系

为什么在委托中将事件呢
事件是基于委托的;
例:

EventHandler 事件源码

namespace System
{
    //
    // 摘要:
    //     表示将处理不包含事件数据的事件的方法。
    public delegate void EventHandler(object sender, EventArgs e);
}

其实就是一个特殊的双参数的委托。
事件简单的来说就是:
1.创建委托
2.委托的实例–>对应事件的处理事件,触发的事件。
3.触发因素。就是来调用委托的某个方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值