分分钟用上C#中的委托和事件 – 雾中人

开端研究C的每个模仿者,在几乎不注意碰到委托和事情的构想时,预测都是加入望而却步的。,神不守舍。百度一搜,状态构想引见的文字是很多文字。,敢情,有很多好文字容易的默认。。本人可以研读这些文字。,聚集初学者,据我看来我合法的置信我能默认。,一旦要在本身的顺序中出版委托和事情,这是个二百五。,我不创造该怎样用。,我不创造什么运用它。。

本文不注意可能的选择哪独身构想引见。,针对帮忙同窗们迅速地出版委托和事情,进入C的高高的状况。

  • 率先,本人必要创造,终于在什么局面下不可避免的运用委托和事情呢?

请看下面的事件。:A首脑要停止大吃大喝。,嘱咐使服从B和C各自带队大败在掩藏安博,认为改正无误以优胜杯订购:举你的左侧。,B外观球队外出。;用右举你的优胜杯。,C外观球队外出。;设想你立即把优胜杯放下来,B和C同时屈服死。。B、C袭击的详细办法,酋长漠不关心。。(全文最后部分时的履行法典)。)

智力回应经文快的同窗,就说出版,这种逻辑,保持健康运用if保持健康来决定宣判?:

 1if(左侧抬高)
 2{
 3  B外观球队外出。  
 4}
 5elseif(举你的右)
 6{
 7  C外观球队外出。  
 8}
 9elseif(立即到优胜杯)
10{
11  B外观球队外出。
12  C外观球队外出。  
13}
14else15{
16  按兵不动  
17 }

设想它这样地的复杂,那我为什么要写这篇文字呢?。请让这样地地先生小心的想想。:酋长当时收回动机?他甚至不注意认识到本身。。过后下面的伪法典。,你计划拔出到哪里呢?难道B和C就一向不住的用While一圈做上述的断定吗?显然不恰当的吧。更要紧的,设想你伸出它,使服从不仅是B和C,不过B、C、D、E等,各位都有本身的方法来回应领唱者的号令。,因而助动词=have领唱者者A来说,本人得独自处置每个使服从。,下面提到的伪法典,将有无穷大的扩张和圆房。,显然挑剔本人祝福的。。

改正的逻辑得是,B和C可能的选择大吃大喝上发作了是什么。,只需注意领队收回优胜杯升腾或发生率的动机。,一旦领唱者者A收回动机。,它相当于留心持有使服从。,持有被委派的人,他们都是操纵举动的。!

本人清晰度了三个类。,加入模仿头A和副B。、C:

////// 头A
    ///publicclass A
    { 
    
    }
    ////// 使服从B
    ///publicclass B
    { 
    
    }
    ////// 使服从C
    ///publicclass C
    { 
    
    }

头A的类有敬酒和摔杯两种办法,内脏,举办法具有拘泥于形式的参量。,送是左侧抬高。,尽管如此用右举眼睛的?。使服从B和C的类,每个都有独身袭击办法。。

////// 头A
    ///publicclass A
    {
        ////// 敬酒
        //////手:左、右publicvoid Raise(string 手)
        {
            ("头A{0}手敬酒", 手);
        }
        ////// 摔杯
        ///publicvoid Fall()
        {
            ("头A摔杯");
        }
    }
    ////// 使服从B
    ///publicclass B
    {
        ////// 袭击
        ///publicvoid Attack()
        {
            ("使服从B产生袭击");
        }
    }
    ////// 使服从C
    ///publicclass C
    {
        ////// 袭击
        ///publicvoid Attack()
        {
            ("使服从C产生袭击");
        }
    }

像这样地,三个孤独很好的,建造物最后部分。这么,怎样让使服从B和C,停飞领唱者的奥秘专门用语,他能去加入确切的的举动吗?
本人必要在头A类中,采取一种办法,把其企图印象出去。在头A类屯积,加入清晰度独身带形参的敬酒委托RaiseEventHandler和独身不带形参的摔杯委托FallEventHandler。命名支配是在办法的命名前面添加EvEnthDANDLE。,不要问我为什么。,有很多状态为以及其他等等文字。,你可以查一下。。这篇文字的意愿坚决的是,教会每件东西什么迅速地的运用委托和事情。敢情,您也可以不依照这样地地命名支配。,对顺序的运转不注意假装。,它只会加法运算你本身或别的研读法典的异议。。

delegatevoid RaiseEventHandler(string 手);
delegatevoid FallEventHandler();

过后,在头A类中,清晰度两个事情。这类似于在WrFrm中拖放扣子时的局面。,双点取扣子,您可以汇编者它的事情。。

////// 头A敬酒事情
        ///publicevent RaiseEventHandler RaiseEvent;
        ////// 头A摔杯事情
        ///publicevent FallEventHandler FallEvent;

好了,履行下两个测度后,就可以在头A的敬酒和摔杯办法中,调出版述两个事情。。这样地,设想B和C订阅了这样地地事情,它可以自动的担当管理人。。

////// 敬酒
        //////手:左、右publicvoid Raise(string 手)
        {
            ("头A{0}手敬酒", 手);
            // 致电烘烤活跃,输出左或右作为参量if (RaiseEvent!=null)
            {
                RaiseEvent(手);
            }
        }
        ////// 摔杯
        ///publicvoid Fall()
        {
            ("头A摔杯");
            // 致电杯赛if (FallEvent!=null)
            {
                FallEvent();
            }
        }

异样,不要问为什么。。停飞下使运行,您可以。一旦煮熟,就运用这种办法。,默认意思,敢情默认这是为什么写的。。

在使服从B和C本质上,不可避免的在头A,A心情可以被创造。。因而,在B类和C类,必要陈述A,该陈述可以经过B和C的建造物行使职责停止事例化。事例化后来地,您可以订阅B类和C类切中要害A类事情。。

履行的法典列举如下:

  1class Program
  2    {
  3staticvoid Main(string[] ARGS)
  4        {
  5             A a = new A(); // 清晰度头A  6  7             B b = new B(a) // 清晰度使服从B  8  9             C c = new C(a) // 清晰度使服从C
 10 11// 头A左侧敬酒 12             ("");
 13 14// 头A右敬酒
 15//(右)
 16 17// 头A摔杯
 18//(); 19 20            Console.ReadLine();
 21// 因B和C订阅了独身事情。,因而不必要法典。,B和C将鉴于合同书行事。。 22        }
 23    }
 24 25/// 26/// 头A敬酒委托
 27/// 28///手:左、右 29publicdelegatevoid RaiseEventHandler(string 手);
 30/// 31/// 头A摔杯委托
 32/// 33publicdelegatevoid FallEventHandler();
 34/// 35/// 头A
 36/// 37publicclass A
 38    {
 39/// 40/// 头A敬酒事情
 41/// 42publicevent RaiseEventHandler RaiseEvent;
 43/// 44/// 头A摔杯事情
 45/// 46publicevent FallEventHandler FallEvent;
 47 48/// 49/// 敬酒
 50/// 51///手:左、右 52publicvoid Raise(string 手)
 53        {
 54             ("头A{0}手敬酒", 手);
 55// 致电烘烤活跃,输出左或右作为参量 56if (RaiseEvent!=null)
 57            {
 58                RaiseEvent(手);
 59            }
 60        }
 61/// 62/// 摔杯
 63/// 64publicvoid Fall()
 65        {
 66             ("头A摔杯");
 67// 致电杯赛 68if (FallEvent!=null)
 69            {
 70                FallEvent();
 71            }
 72        }
 73    }
 74/// 75/// 使服从B
 76/// 77publicclass B
 78    {
 79        A a;
 80 81public B(A) a)
 82        {
 83this.a = a;
 84             Event += new RaiseEventHandler(a_RaiseEvent); // 敬酒烘烤 85             Event += new FallEventHandler(a_FallEvent); // 订购杯赛 86        }
 87/// 88/// 敬酒有关运动的
 89/// 90///若头A左侧敬酒,B袭击 91void a_RaiseEvent(string 手)
 92        {
 93if ((""))
 94            {
 95                Attack();
 96            }
 97        }
 98 99///100/// 领唱者者在杯切中要害有关运动的
101///102void a_FallEvent()
103        {
104            Attack();
105        }
106107///108/// 袭击
109///110publicvoid Attack()
111        {
112             ("使服从B产生袭击,哭声:张飞莱亦独身霸道的人。!");
113        }
114    }
115///116/// 使服从C
117///118publicclass C
119    {
120        A a;
121public C(A) a)
122        {
123this.a = a;
124             Event += new RaiseEventHandler(a_RaiseEvent); // 敬酒烘烤125             Event += new FallEventHandler(a_FallEvent); // 订购杯赛126        }
127///128/// 敬酒有关运动的
129///130///若头A右敬酒,过后袭击131void a_RaiseEvent(string 手)
132        {
133if ((""))
134            {
135                Attack();
136            }
137        }
138139///140/// 领唱者者在杯切中要害有关运动的
141///142void a_FallEvent()
143        {
144            Attack();
145        }
146///147/// 袭击
148///149publicvoid Attack()
150        {
151             ("使服从C产生袭击,一组衰弱的神打败了大虫。");
152        }
153     }

发表评论

电子邮件地址不会被公开。 必填项已用*标注