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

发表评论

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