Delegate

1.如何使用delegate,定义一个委托类型的DEL委托,使其可以接收一个传递string的method。

public delegate void Del(string message);

// Create a method for a delegate.

public static void DelegateMethod(string message){

    Console.WriteLine(message);

}

// Instantiate the delegate.Del  

Del handler = DelegateMethod;

// Call the delegate.

handler("Hello World");

应用场景:在一个A类中定义一个委托,然后再在被调用的A类中定义事件,最后在调用的B类中订阅A类中的事件。在使用的是时候,只需要声明A类即可。

示例代码:https://github.com/Fdslk/myCoreApp/tree/master/TestDelegate

2.使用delegate进行synchronous callback,将委托作为一个参数传入

public static void MethodWithCallback(int param1, int param2, Del callback)

{

    callback("The number is: " + (param1 + param2).ToString());

}

3.委托多个method,将委托进行加操作,最后对其进行invoke操作,会按照顺序执行委托方法

allMethodsDelegate.Invoke("aaa-----");

4.delegate func (must include one output definition):主要好处就是不用定一个委托,而是直接声明func就可以直接使用;Func is a generic delegate included in the System namespace. It has zero or more input parameters and one out parameter. The last parameter is considered as an out parameter.

1)用来组装lambda expression Func<string, string> selector = str => str.ToUpper();声明之后再在lambda expression中直接使用该func

2)声明Anonymous method Func<string, string> convert = delegate(string s)  { return s.ToUpper();};

这么写的好处?

5.delegate action (Encapsulates a method that has no parameters and does not return a value.)

1) instantiating the Action delegate

2)  Action delegate with anonymous methods

3) lambda expression to an Action delegate instance

6.event 是基于delegate的一种衍生的对象,通常需要event先去publish一个notification,然后订阅者订阅该信息,即可在event发布notification的时候consume。

1)应用场景:触发一个event,通常需要一个action的trigger,一般都是基于的用户的交互,button的click事件,组件的属性改变的时候。该事件被触发的这个过程可以被称为一个event sender

2)how to implement event

1> define event provider

2> define eventArgs model(event data,The EventHandler delegate includes the EventArgs class as a parameter.)

3> define event handler(签名和event中的handler delegate保持一致)

写之前,我先说自己一个SB的地方,dotnet core console输入的地方,不能在dotnet的输入框中,需要在terminal中以dotnet run的形式跑起来,否则会报出一下的错误

debug的时候认为这不是一个console application项目

解决方法:用rider debug,或者一下方法

修改内置launch setting

实现方法一:不需要传递数据,只需要在满足某个条件的时候执行某些事件。以一个累加为例,从console中输入数据,当数据输入的次数大于threshold的时候,触发委托的事件。参考代码:https://github.com/Fdslk/myCoreApp/commit/9d909a0f62788c8ae81e5bc783b87a0d756aaaf4#diff-40929d8b453e589975c232c626d204f8d4b51223d3d851c7b66c3e66b61471c7

实现方法二:构建一个能够传递参数的委托event,定义一个带有抽象参数的event handler  public event EventHandler<ThresholdReachedEventArgs> ThresholdReached, ThresholdReachedEventArgs inherit from EventArgs。参考代码:https://github.com/Fdslk/myCoreApp/commit/92ac854d640bca89ee3e59a67dc57168c95aa144

执行event关键

实现方式三:使用委托来实现event,定义一个能够接受参数的delegate, public delegate void ThresholdReachedHandlerEvent(Object sender, ThresholdReachedEventArgs e);,再在实现类中定义一个上述委托声明的event,实现event触发的实践和上图一致,参考代码:https://github.com/Fdslk/myCoreApp/commit/6368d89069cc6c2f757ceaaa589f68dde37c51fe

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容