SlideShare ist ein Scribd-Unternehmen logo
1 von 4
Лекц №8<br />Сэдэв: С#-ийн event , ò¿¿íèé òóõàé<br />Еvent нь нэг объектын юу хийж буйг нөгөө объектод мэдээлдэг. Жишээ нь: Õóлганы заагч хаана байгаагаас, аль товч дарагдсан зэргээс хамаарч ялгаатай ¿éлдлүүд хийгдэж байгааг мэдээлж болно. Event  ихэвчлэн график интерфейст  програмд түлхүү хэрэглэгддэг. EVENT ажиллах үед дуудагдах функц delegate-ын тусламжтайгаар өгөгдөнө. <br />Event-тэй ажилладаг delegate заавал 2 утга авдаг. Эхнийх нь event хийгдэж буй объект, дараагийнх нь event-ийн талаарх мэдээллийг агуулсан объект байх ёстой.<br />Хэрэглэгчийн event тодорхойлох<br />CarControl delegate 2 event-тэй. Эхнийх нь СаrControl-ын хурд дээд хязгаартаа хүрэхэд илгээгдэх AboutToBlow, дараагийн event нь хурд зөвшөөрөгдсөн хэмжээнээс давсан тохиолдолд BelowUp еvent илгээгдэнэ. Энý ¿åä еvent-үүд System.String төрлийн ганц параметр авч, void утга буцаадаг дурын функцийн хаягийг авч чаддаг делегаттай холбогдож чадна. CarContropl-ын рublic хэсэгт еvent нэмбэл: <br />public delegate void CarEventHandler (string msg) ;<br />рublic event CarEventhandler AboutToBlow;<br />рublic event CarEventHandler BlewUp;<br />Мºн дараахь жишээнд AlarmClock  класст Alarm гэсэн рublic event тодорхойлъё. AlarmEventArgs класс EventArgs-аас удамшиж Аlarm Event руу өгөгдөл тодорхойлно. АlarmDriver класс классуудыг бүгдийг ашигладаг ба WakeMeUp-ын AlarmRang функцийг АAlarmClock-ын Alarm Event-ийг авна. Энý програм делегат, еvent-ийí хамаарлыг харуулсан жишээ юм.<br />namespace EventSample<br />{<br />    using System;<br />    using System.ComponentModel;<br />    public class AlarmEventArgs : EventArgs<br />    {<br />        private readonly bool snoozePressed;<br />        private readonly int nrings;<br />        public AlarmEventArgs(bool snoozePressed, int nrings)<br />        {<br />            this.snoozePressed = snoozePressed;<br />            this.nrings = nrings;<br />        }<br />        public int NumRings<br />        {            get { return nrings; }        }<br />        public bool SnoozePressed<br />        {            get { return snoozePressed; }        }<br />           public string AlarmText<br />        {            get<br />            {<br />                if (snoozePressed)<br />                {     return (“Wake Up!!! Snooze time is over.”);                }<br />                else  {   return (“Wake Up!”);                }<br />            }<br />        }<br />    }<br />public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);<br />public class AlarmClock<br />    {<br />        private bool snoozePressed = false;<br />        private int nrings = 0;<br />        private bool stop = false;<br />        // Stop property íü ñýð¿¿ëãèéã óíòðààõ ¸ñòîéã çààíà<br />        public bool Stop<br />        {<br />            get { return stop; }<br />            set { stop = value; }<br />        }<br />        public bool SnoozePressed<br />        {<br />            get { return snoozePressed; }<br />            set { snoozePressed = value; }<br />        }<br />        public event AlarmEventHandler Alarm;<br />        protected virtual void OnAlarm(AlarmEventArgs e)<br />        {<br />            AlarmEventHandler handler = Alarm;<br />            if (handler != null)<br />            {        handler(this, e);          }<br />        }<br />        public void Start()<br />        {<br />            for (; ; )<br />            {<br />                nrings++;<br />                if (stop)<br />                {            break;               }<br />                else {<br />    if (snoozePressed)<br />                    {<br />System.Threading.Thread.Sleep(1000);<br />                    {<br />                        AlarmEventArgs e = new AlarmEventArgs(snoozePressed,nrings);<br />                       OnAlarm(e);<br />                    }<br />                      }<br />                  else                {<br />                    System.Threading.Thread.Sleep(300);<br />                    AlarmEventArgs e = new AlarmEventArgs(snoozePressed,nrings);<br />                    OnAlarm(e);<br />                }<br />            }<br />        }<br />    }<br />    public class WakeMeUp<br />    {<br />        public void AlarmRang(object sender, AlarmEventArgs e)<br />        {<br />            Console.WriteLine(e.AlarmText + “”);<br />            if (!(e.SnoozePressed))<br />            {<br />                if (e.NumRings % 10 == 0)<br />                {<br />                   Console.WriteLine(“ Let alarm ring?Enter Y”);<br />                   Console.WriteLine(“ Press Snooze? Enter N”);<br />                   Console.WriteLine(“ Stop Alarm? Enter Q”);<br />                   String input = Console.ReadLine();<br />                   if(input.Equals(“Y”)||input.Equals(“y”)) return;<br />                   else <br />if (input.Equals(“N”) || input.Equals(“n”))<br />                    {<br />                      ((AlarmClock)sender).SnoozePressed = true;<br /> return;<br />          }<br />                    else<br />                    {<br />                       ((AlarmClock)sender).Stop = true;<br />                        return;<br />                    }<br />               }            }<br />            else<br />            {<br />                  Console.WriteLine(“ Let alarm ring? Enter Y”);<br />                Console.WriteLine(“ Stop Alarm? Enter Q”);<br />                String input = Console.ReadLine();<br />               if(input.Equals(“Y”)||input.Equals(“y”)) return;<br />                else<br />                {<br />                    ((AlarmClock)sender).Stop = true;<br />                    return;<br />                }<br />            }<br />        }<br />    }<br />    public class AlarmDriver<br />    {<br />        public static void Main(string[] args)<br />        {<br />            WakeMeUp w = new WakeMeUp();<br />            AlarmClock clock = new AlarmClock();<br />            clock.Alarm += new AlarmEventHandler(w.AlarmRang);<br />            clock.Start();<br />        }<br />    }<br />}<br />¯ð ä¿í: <br />Çóðàã 6.5.  Alarm Event-èéí ¿ð ä¿í<br />Мэдлэг шалгах асуулт<br />,[object Object]
Дээрх  SimpleDelegate namespace-т тодорхойлогдсон МуMath классыг үржих, хуваах функцуудаар нэмж баяжуул. ВinaryОр делегат ашиглан дуудаж үз.
Төрºл хувиргадаг multi delegate бич. Эхний функц нь дамжиãäàж ирсэн int утгыг float рүү, дараагийнх нь string рүү хөрвүүлэх ёстой.
MultiDelegate namespace-т р -= new LinePrint(ToUpper); мөр нэмж үр дүнг хараарай.

Weitere ähnliche Inhalte

Mehr von orgil

Bodlogo
BodlogoBodlogo
Bodlogoorgil
 
Its150 l2
Its150 l2Its150 l2
Its150 l2orgil
 
Its150 l1
Its150 l1Its150 l1
Its150 l1orgil
 
Test
TestTest
Testorgil
 
Example excel2007
Example excel2007Example excel2007
Example excel2007orgil
 
Test7
Test7Test7
Test7orgil
 
Test6
Test6Test6
Test6orgil
 
Bodlogiin code
Bodlogiin codeBodlogiin code
Bodlogiin codeorgil
 
Bodlogo
BodlogoBodlogo
Bodlogoorgil
 
Bodlogo
BodlogoBodlogo
Bodlogoorgil
 
Bodlogo
BodlogoBodlogo
Bodlogoorgil
 
Its150 l10powerpoint2007
Its150 l10powerpoint2007Its150 l10powerpoint2007
Its150 l10powerpoint2007orgil
 
Its150 l10powerpoint2007
Its150 l10powerpoint2007Its150 l10powerpoint2007
Its150 l10powerpoint2007orgil
 
Test5
Test5Test5
Test5orgil
 
Test7
Test7Test7
Test7orgil
 
Test7
Test7Test7
Test7orgil
 
Test7
Test7Test7
Test7orgil
 
Test7
Test7Test7
Test7orgil
 
Test6
Test6Test6
Test6orgil
 

Mehr von orgil (20)

Bodlogo
BodlogoBodlogo
Bodlogo
 
Its150 l2
Its150 l2Its150 l2
Its150 l2
 
Its150 l1
Its150 l1Its150 l1
Its150 l1
 
Bd
BdBd
Bd
 
Test
TestTest
Test
 
Example excel2007
Example excel2007Example excel2007
Example excel2007
 
Test7
Test7Test7
Test7
 
Test6
Test6Test6
Test6
 
Bodlogiin code
Bodlogiin codeBodlogiin code
Bodlogiin code
 
Bodlogo
BodlogoBodlogo
Bodlogo
 
Bodlogo
BodlogoBodlogo
Bodlogo
 
Bodlogo
BodlogoBodlogo
Bodlogo
 
Its150 l10powerpoint2007
Its150 l10powerpoint2007Its150 l10powerpoint2007
Its150 l10powerpoint2007
 
Its150 l10powerpoint2007
Its150 l10powerpoint2007Its150 l10powerpoint2007
Its150 l10powerpoint2007
 
Test5
Test5Test5
Test5
 
Test7
Test7Test7
Test7
 
Test7
Test7Test7
Test7
 
Test7
Test7Test7
Test7
 
Test7
Test7Test7
Test7
 
Test6
Test6Test6
Test6
 

Lecture8

  • 1.
  • 2. Дээрх SimpleDelegate namespace-т тодорхойлогдсон МуMath классыг үржих, хуваах функцуудаар нэмж баяжуул. ВinaryОр делегат ашиглан дуудаж үз.
  • 3. Төрºл хувиргадаг multi delegate бич. Эхний функц нь дамжиãäàж ирсэн int утгыг float рүү, дараагийнх нь string рүү хөрвүүлэх ёстой.
  • 4. MultiDelegate namespace-т р -= new LinePrint(ToUpper); мөр нэмж үр дүнг хараарай.