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

发表评论

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