* इस सवाल का शरीर में हुआ करता था:
यहाँ एक लेख का लिंक है कि इस तरह का वर्णन करता है एक ऐप का उदाहरण जो घटनाओं का उपयोग करता है (अनुमान है कि यह वास्तव में भी परीक्षण में मदद करता है?)
विचार अब तक हैं:
घटनाओं का उपयोग क्यों करें या प्रकाशित/सदस्यता लें?
किसी ईवेंट को उठाए जाने पर कक्षाओं की किसी भी संख्या को अधिसूचित किया जा सकता है।
सदस्यता लेने वर्गों पता है कि कैसे Metronome (नीचे कोड देखें) काम करता है, और Metronome को पता है कि वे घटना
प्रकाशक और ग्राहकों के जवाब में क्या करने जा रहे की जरूरत नहीं है की जरूरत नहीं है प्रतिनिधि द्वारा decoupled हैं। यह अत्यधिक वांछनीय है क्योंकि यह अधिक लचीला और मजबूत कोड बनाता है। मेट्रोनोम बदल सकता है कि यह किसी भी सदस्यता लेने वाले वर्गों को तोड़ने के बिना समय का पता लगाता है। सदस्यता लेने वाले वर्ग मेट्रोनोम को तोड़ने के बिना समय परिवर्तनों का जवाब कैसे बदल सकते हैं। दो वर्ग स्वतंत्र रूप से एक दूसरे से घूमते हैं, जो कोड को बनाए रखने के लिए आसान बनाता है।
class Program
{
static void Main()
{
// setup the metronome and make sure the EventHandler delegate is ready
Metronome metronome = new Metronome();
// wires up the metronome_Tick method to the EventHandler delegate
Listener listener = new Listener(metronome);
ListenerB listenerB = new ListenerB(metronome);
metronome.Go();
}
}
public class Metronome
{
// a delegate
// so every time Tick is called, the runtime calls another method
// in this case Listener.metronome_Tick and ListenerB.metronome_Tick
public event EventHandler Tick;
// virtual so can override default behaviour in inherited classes easily
protected virtual void OnTick(EventArgs e)
{
// null guard so if there are no listeners attached it wont throw an exception
if (Tick != null)
Tick(this, e);
}
public void Go()
{
while (true)
{
Thread.Sleep(2000);
// because using EventHandler delegate, need to include the sending object and eventargs
// although we are not using them
OnTick(EventArgs.Empty);
}
}
}
public class Listener
{
public Listener(Metronome metronome)
{
metronome.Tick += new EventHandler(metronome_Tick);
}
private void metronome_Tick(object sender, EventArgs e)
{
Console.WriteLine("Heard it");
}
}
public class ListenerB
{
public ListenerB(Metronome metronome)
{
metronome.Tick += new EventHandler(metronome_Tick);
}
private void metronome_Tick(object sender, EventArgs e)
{
Console.WriteLine("ListenerB: Heard it");
}
}
पूरा लेख मैं अपनी साइट पर लिख रहा हूँ: http://www.programgood.net/
इस पाठ के कुछ nb http://www.akadia.com/services/dotnet_delegates_and_events.html
चीयर्स से है।
स्रोत
2009-04-09 05:12:52
यह एक प्रश्नोत्तर साइट है, ब्लॉग नहीं ... यदि आप वास्तव में यहां प्रतिक्रिया प्राप्त करना चाहते हैं, तो अपना प्रश्न कम करें ... केवल प्रश्न, और बाकी को उत्तर के रूप में पोस्ट करें। – Shog9