C# 委托和事件

委托

声明委托:声明一个委托对象(专门接委托的人),这个委托对象会告诉别人当你给叫我的时候我就会
param1.给你什么类型结果;param2:我叫什么名字;param3:我需要你提供什么

delegate <return type> <delegate-name> <parameter list>

示例:
我叫 MyDelegate,当你调用我的时候我需要给我一个string类型的参数,我会返回一个int类型的值给你

delegate int MyDelegate (string s);

给委托赋值
委托自己是不会进行动作的,只会调用其他人(方法)的动作,可以理解为,
你想买肯德基(方法名)的饮料(参数),你想买古茗的饮料
那你可以把这个事告诉我,我来帮你跑腿

//告诉我我都需要去哪些地方
MyDelegate=buyKFC;
MyDelegate+=buyGUMING;
//告诉我你想要什么并让我开始行动
int r=MyDelegate("饮料")

C#自带两种已经封装好的委托

//没有返回值的委托
Action<T> <delegate-name>=new Action<T>(function-name)
//示例
Action<string> MyDelegate = new Action<string>(buDrink);
//带返回值的委托
Func<T> <delegate-name>=new Action<T>(function-name)
//示例
//有返回值,无参数
Func<string> MyDelegate = new Func<string>(buDrink);//<>中传入的为buDrink的返回值类型
//有返回值,有参数
Func<string,string> MyDelegate = new Func<string,string>(buDrink);//<>中传入的最后一个参数为buDrink的返回值,其他均为FuncBook的参数

事件:

事件的声明:
声明事件时需要声明什么类型的代理人可以代理处理这个事件,即将事件发生后的动作权交给委托

//声明一个委托
delegate void HandlerName();
//声明一个xx委托类型的事件
public event HandlerName eventName;

举个例子来理解委托:
事件:我想喝饮料了
服务提供商:肯德基、古茗
委托:外卖小哥

背景:
1.肯德基和古茗为了盈利,订阅了很多人的动态
2.我和一个外卖小哥签了一个契约,当我召唤他的时候,他就要去契约里列好的商家的窗口

接下来是事情发生顺序

  1. 肯德基开店了,在窗口前留了个服务,当有人到窗口前就给自己做一份可乐并在github论坛留下一个信息:“嘿嘿,老板说的,有人来我才可以动,但是不让我搭理任何人,只能做可乐,谢谢你了陌生人”
void KFCWin(){
makeDrink
printInGithub(“嘿嘿,老板说的,有人来我才可以动,但是不让我搭理任何人,只能做可乐,谢谢你了陌生人”)
}
  1. 古茗开店了,在窗口前留了个服务,当有人在窗口前说要买饮料时就在github论坛留下信息“听说最近有精神病跑出来了,这个人到这儿也不说话,我也不敢说话,害怕”
void gumingWin(){
printInGithub(“听说最近有精神病跑出来了,这个人到这儿也不说话,我也不敢说话,害怕”)
}

3.我创造了一个外卖小哥,并和他签订了契约

main(){
    delegate void waimaiHandle();
    public event waimaiHandle callWaimai;
    callWaimai+=KFCWin
    callWaimai+=gumingWin
}

  1. 我想喝饮料了,于是召唤了外卖小哥,叫来了才发现契约里没写我想喝什么,但是不想停下手上的code,于是心想就这样吧
main(){
    delegate void waimaiHandle();
    public event waimaiHandle callWaimai;
    callWaimai+=KFCWin
    callWaimai+=gumingWin

    callWaimai()
}

  1. 正在code的时候,我遇到了一个难题,很久都没有解决,就打开了github,突然发现有两个新帖子
KFC:“嘿嘿,老板说的,有人来我才可以动,但是不让我搭理任何人,只能做可乐,谢谢你了陌生人”
guming:“听说最近有精神病跑出来了,这个人到这儿也不说话,我也不敢说话,害怕”

!!!怪不得他不回来也没发消息,我没有找他要返回值…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值