分分钟用上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等,全世界都有本人的方法来回应榜样的召唤。,因而在四周榜样者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     }

发表评论

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