六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

一個男人與3個女人的故事[《.net框架程序設(shè)計(jì)》讀書筆記_第11章 多事件示例]

[摘要]第十一章 多事件示例[一個男人和三個女人的故事]摘要: 應(yīng)用FCL中的System.ComponentModel.EventHandlerList示例一個類型中發(fā)布多事件的應(yīng)用 場景:一個男生有三個女朋友,各自有不同的愛好,女朋友A愛好音樂,女朋友B愛好美食,女朋友C愛好XXX,為滿足...
第十一章 多事件示例[一個男人和三個女人的故事]

摘要:

應(yīng)用FCL中的System.ComponentModel.EventHandlerList示例一個類型中發(fā)布多事件的應(yīng)用



場景:一個男生有三個女朋友,各自有不同的愛好,女朋友A愛好音樂,女朋友B愛好美食,女朋友C愛好XXX,為滿足各個女朋友,此男生必須進(jìn)行唱歌、烹飪食物、xxx。

以此制作程序演示單類型多事件的應(yīng)用,并假設(shè)此男同時只能干一件事情(即排除一邊xxx一邊唱歌或一邊xxx一邊烹飪的可能J)

如下為源代碼:

using System;

using System.ComponentModel;



//男朋友的源代碼

public class BoyFriend

{

protected EventHandlerList eventList

= new EventHandlerList();



//

//滿足女朋友A定義音樂喜好

//使用自定義的音樂事件及回調(diào)函數(shù)

protected static readonly object musicEventKey = new object();

public class MusicEventArgs : EventArgs

{

private string strMusicName;



public string MusicName

{

get{

return strMusicName;

}

}



public MusicEventArgs(string strMusicName)

{

this.strMusicName = strMusicName;

}

}



public delegate void MusicEventHandler(object sender, MusicEventArgs args);



public event MusicEventHandler MusicMsg

{

add

{

eventList.AddHandler(musicEventKey, value);

}

remove

{

eventList.RemoveHandler(musicEventKey, value);

}

}



protected virtual void OnMusic(MusicEventArgs e)

{

Delegate d = eventList[musicEventKey];

if(d != null)

{

d.DynamicInvoke(new Object[]{this, e});

}

}



public void SimulateMusic(string strName)

{

Console.WriteLine("男朋友:好的,我給你唱支{0}吧!", strName);

OnMusic(new MusicEventArgs(strName));

}



//

//滿足女朋友B的美食欲望

//

protected static readonly object cateEventKey = new object();

public class CateEventArgs : EventArgs

{

private string strCateName;

public string CateName

{

get

{

return strCateName;

}

}



public CateEventArgs(string strCateName)

{

this.strCateName = strCateName;

}

}

public delegate void CateEventHandler(Object sender, CateEventArgs args);

public event CateEventHandler CateMsg

{

add

{

eventList.AddHandler(cateEventKey, value);

}



remove

{

eventList.RemoveHandler(cateEventKey, value);

}

}

protected void OnCate(CateEventArgs e)

{

Delegate d = eventList[cateEventKey];

if(d != null)

{

d.DynamicInvoke(new Object[]{this, e});

}

}

public void SimulateCate(string strCateName)

{

Console.WriteLine("男朋友:請吃一點(diǎn)我做的{0}", strCateName);

OnCate(new CateEventArgs(strCateName));

}



//

//滿足女朋友C的xxx欲望

//使用EventArgs.Empty事件及System.EventHandler回調(diào)函數(shù)

protected static readonly object xxxEventKey = new object();

public event EventHandler XXXMsg

{

add

{

eventList.AddHandler(xxxEventKey, value);

}

remove

{

eventList.RemoveHandler(xxxEventKey, value);

}

}

protected virtual void OnXXX()

{

Delegate d = eventList[xxxEventKey];

if(d != null)

{

d.DynamicInvoke(new Object[]{this, EventArgs.Empty});

}

}

public void SimulateXXX()

{

Console.WriteLine("男朋友:你今天真漂亮呵!");

OnXXX();

}



public static void Main()

{

BoyFriend bf = new BoyFriend();



//

Console.WriteLine("上午 女朋友A來玩:");

GF_A gfa = new GF_A(bf);

bf.SimulateMusic("戀曲");

gfa.Unregister(bf);



//

Console.WriteLine();

Console.WriteLine("下午 女朋友B來玩");

GF_B gfb = new GF_B(bf);

bf.SimulateCate("祖?zhèn)餍√瘘c(diǎn)");

gfb.Unregister(bf);



//

Console.WriteLine();

Console.WriteLine("晚上 女朋友C來玩");

GF_C gfc = new GF_C(bf);

bf.SimulateXXX();

gfc.Unregister(bf);

}

}



//女朋友A的源代碼

public class GF_A

{

public GF_A(BoyFriend bf)

{

bf.MusicMsg += new BoyFriend.MusicEventHandler(MusicMsg);

Console.WriteLine("女朋友A:老公!我要聽歌");

}



private void MusicMsg(Object sender, BoyFriend.MusicEventArgs args)

{

switch(args.MusicName)

{

case "戀曲":

case "清歌":

Console.WriteLine("女朋友A:哇,是{0}耶,好喜歡啊!", args.MusicName);

break;

default:

Console.WriteLine("女朋友A:這首歌沒聽過耶,好好聽奧!");

break;

}

}



public void Unregister(BoyFriend bf)

{

BoyFriend.MusicEventHandler bfe = new BoyFriend.MusicEventHandler(MusicMsg);

bf.MusicMsg -= bfe;

Console.WriteLine("女朋友A: 休息了,別吵!");

}

}

//女朋友B的源代碼

public class GF_B

{

public GF_B(BoyFriend bf)

{

bf.CateMsg += new BoyFriend.CateEventHandler(CateMsg);

Console.WriteLine("女朋友B: 老公!我餓了!");

}

private void CateMsg(Object sender, BoyFriend.CateEventArgs args)

{

switch(args.CateName)

{

case "祖?zhèn)餍√瘘c(diǎn)":

Console.WriteLine("女朋友B: 哇!老公你真能干,{0}好好吃耶!", args.CateName);

break;

case "餅干":

case "方便面":

Console.WriteLine("女朋友B: 剛認(rèn)識你時,給人家做小點(diǎn)心,現(xiàn)在讓人家吃方便食品了,555555");

break;

default:

Console.WriteLine("女朋友B: 這是什么東東,沒吃過耶");

break;

}

}

public void Unregister(BoyFriend bf)

{

BoyFriend.CateEventHandler e = new BoyFriend.CateEventHandler(CateMsg);

bf.CateMsg -= e;

Console.WriteLine("女朋友B: 吃飽了,謝謝你噢!");

}

}

//女朋友C的源代碼

public class GF_C

{

public GF_C(BoyFriend bf)

{

bf.XXXMsg += new EventHandler(XXXMsg);

Console.WriteLine("女朋友C: 老公!你今天真帥哦!");

}



private void XXXMsg(Object sender, EventArgs args)

{

Console.WriteLine("女朋友C: R...O...O...M...");

}



public void Unregister(BoyFriend bf)

{

EventHandler e = new EventHandler(XXXMsg);

bf.XXXMsg -= e;

Console.WriteLine("女朋友C:累了,想休息了!");

}

}

/*運(yùn)行結(jié)果:

上午 女朋友A來玩:
女朋友A:老公!我要聽歌
男朋友:好的,我給你唱支戀曲吧!
女朋友A:哇,是戀曲耶,好喜歡啊!
女朋友A: 休息了,別吵!

下午 女朋友B來玩
女朋友B: 老公!我餓了!
男朋友:請吃一點(diǎn)我做的祖?zhèn)餍√瘘c(diǎn)
女朋友B: 哇!老公你真能干,祖?zhèn)餍√瘘c(diǎn)好好吃耶!
女朋友B: 吃飽了,謝謝你噢!

晚上 女朋友C來玩
女朋友C: 老公!你今天真帥哦!
男朋友:你今天真漂亮呵!
女朋友C: R...O...O...M...
女朋友C:累了,想休息了!

*/

注:1、因上例使用FCL中的System.ComponentModel.EventHandlerList,因此不具備線程安全性。

2、上述代碼中xxx部分未定義事件參數(shù)而是使用System.EventArgs.Emtpy,也沒有定義回調(diào)函數(shù)而是使用System.EventHandler;其他兩個事件都是自定義的。可以修改其他兩個事件

3、關(guān)于發(fā)布事件、自定義事件、多事件定義的詳細(xì)信息,請參考《.net框架程序設(shè)計(jì)》讀書筆記_第十一章 事件



主站蜘蛛池模板: 日本特黄特色视频 | 日韩免费一级 | 欧美在线观看一区 | 亚洲 欧美 中文 日韩欧美 | 日本高清视频色www在线观看 | 欧美一区二区三区婷婷月色 | 五级毛片 | 日韩中文字幕在线亚洲一区 | 日韩18在线观看地址 | 婷婷激情狠狠综合五月 | 最近日本韩国观看 | 清清草在线视频 | 欧美性生活一级 | 特黄毛片 | 午夜剧院免费 | 天天干在线免费视频 | 婷婷色香 | 日本高清一区二区三区不卡免费 | 青春草在线视频精品 | 最新国语露脸精品国产 | 亚洲一区二区三区在线播放 | 三级免费黄色片 | 性久久久久久久久久 | 热久久亚洲 | 日韩欧美视频一区二区 | 四虎影视国产精品亚洲精品hd | 一级毛片女学护士 | 亚洲国产精品久久久天堂麻豆 | 日本免费成人网 | 欧美午夜不卡 | 手机在线看片国产 | 欧美视频福利 | 天天看天天摸天天操 | 天天射综合网站 | 色网站在线 | 深夜国产一区二区三区在线看 | 日韩黄a级成人毛片 | 亚洲a级黄色 | 亚洲免费观看网站 | 青青网视频 | 色婷五月 |