Лекц №8<br />Сэдэв: С#-ийн event , ò¿¿íèé òóõàé<br />Еvent нь нэг объектын юу хийж буйг нөгөө объектод мэдээлдэг. Жишээ нь...
Дээрх  SimpleDelegate namespace-т тодорхойлогдсон МуMath классыг үржих, хуваах функцуудаар нэмж баяжуул. ВinaryОр делегат ...
Төрºл хувиргадаг multi delegate бич. Эхний функц нь дамжиãäàж ирсэн int утгыг float рүү, дараагийнх нь string рүү хөрвүүлэ...
MultiDelegate namespace-т р -= new LinePrint(ToUpper); мөр нэмж үр дүнг хараарай.
Upcoming SlideShare
Loading in …5
×

Lecture8

439 views
402 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
439
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lecture8

  1. 1. Лекц №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 /><ul><li>Event , Delegate хоёрын хамаарал юу вý?
  2. 2. Дээрх SimpleDelegate namespace-т тодорхойлогдсон МуMath классыг үржих, хуваах функцуудаар нэмж баяжуул. ВinaryОр делегат ашиглан дуудаж үз.
  3. 3. Төрºл хувиргадаг multi delegate бич. Эхний функц нь дамжиãäàж ирсэн int утгыг float рүү, дараагийнх нь string рүү хөрвүүлэх ёстой.
  4. 4. MultiDelegate namespace-т р -= new LinePrint(ToUpper); мөр нэмж үр дүнг хараарай.

×