分分钟用上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     }

发表评论

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