国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

一個男人和三個女人的故事[《.net框架程序設計》讀書筆記_第十一章 多事件示例]

2024-07-10 13:03:24
字體:
來源:轉載
供稿:網友
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  • 第十一章 多事件示例[一個男人和三個女人的故事]

    摘要:

    應用fcl中的system.componentmodel.eventhandlerlist示例一個類型中發布多事件的應用



    場景:一個男生有三個女朋友,各自有不同的愛好,女朋友a愛好音樂,女朋友b愛好美食,女朋友c愛好xxx,為滿足各個女朋友,此男生必須進行唱歌、烹飪食物、xxx。

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

    如下為源代碼:

    using system;

    using system.componentmodel;



    //男朋友的源代碼

    public class boyfriend

    {

    protected eventhandlerlist eventlist

    = new eventhandlerlist();



    //

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

    //使用自定義的音樂事件及回調函數

    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("男朋友:請吃一點我做的{0}", strcatename);

    oncate(new cateeventargs(strcatename));

    }



    //

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

    //使用eventargs.empty事件及system.eventhandler回調函數

    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("祖傳小甜點");

    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 "祖傳小甜點":

    console.writeline("女朋友b: 哇!老公你真能干,{0}好好吃耶!", args.catename);

    break;

    case "餅干":

    case "方便面":

    console.writeline("女朋友b: 剛認識你時,給人家做小點心,現在讓人家吃方便食品了,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:累了,想休息了!");

    }

    }

    /*運行結果:

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

    下午 女朋友b來玩
    女朋友b: 老公!我餓了!
    男朋友:請吃一點我做的祖傳小甜點
    女朋友b: 哇!老公你真能干,祖傳小甜點好好吃耶!
    女朋友b: 吃飽了,謝謝你噢!

    晚上 女朋友c來玩
    女朋友c: 老公!你今天真帥哦!
    男朋友:你今天真漂亮呵!
    女朋友c: r...o...o...m...
    女朋友c:累了,想休息了!

    */

    注:1、因上例使用fcl中的system.componentmodel.eventhandlerlist,因此不具備線程安全性。

    2、上述代碼中xxx部分未定義事件參數而是使用system.eventargs.emtpy,也沒有定義回調函數而是使用system.eventhandler;其他兩個事件都是自定義的。可以修改其他兩個事件

    3、關于發布事件、自定義事件、多事件定義的詳細信息,請參考《.net框架程序設計》讀書筆記_第十一章 事件
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 定州市| 外汇| 合江县| 齐河县| 勐海县| 大埔县| 太谷县| 光山县| 宁化县| 清新县| 密山市| 遂昌县| 曲松县| 呼图壁县| 镇原县| 卓尼县| 芮城县| 通城县| 皋兰县| 边坝县| 开鲁县| 株洲县| 微山县| 东乡族自治县| 台前县| 辽阳市| 县级市| 赣榆县| 赤壁市| 桦川县| 贵港市| 莆田市| 沽源县| 卓尼县| 中牟县| 茌平县| 灵山县| 胶州市| 北辰区| 福建省| 望奎县|