2009-04-09 17 views
8

मैं समझ रहा हूं कि घटनाएं सी # में कैसे काम करती हैं (इस क्षेत्र में एक उचित नौसिखिया है)। मैं समझने की कोशिश कर रहा हूं कि हम घटनाओं का उपयोग क्यों करते हैं।घटनाओं का उपयोग क्यों करें?

क्या आप एक अच्छी तरह से कोडित/आर्किटेक्टेड ऐप जानते हैं जो घटनाओं का उपयोग करता है?

** शेष संदेश कतरना और एक जवाब के रूप में डाल **

+1

यह एक प्रश्नोत्तर साइट है, ब्लॉग नहीं ... यदि आप वास्तव में यहां प्रतिक्रिया प्राप्त करना चाहते हैं, तो अपना प्रश्न कम करें ... केवल प्रश्न, और बाकी को उत्तर के रूप में पोस्ट करें। – Shog9

उत्तर

7

एक ठोस सामान्य दुनिया उदाहरण प्रदान करने के लिए ....

आप एक फार्म है, प्रपत्र एक लिस्टबॉक्स है। सूची बॉक्स के लिए एक अच्छी खुश कक्षा है। जब उपयोगकर्ता सूची बॉक्स से कुछ चुनता है, तो आप फ़ॉर्म पर अन्य चीजों को जानना और संशोधित करना चाहते हैं।

बिना घटनाओं:

आप लिस्टबॉक्स से निकाले जाते हैं, सुनिश्चित करें कि आपके माता-पिता प्रपत्र आप पर होने की उम्मीद है बनाने के लिए चीजें अधिभावी। आप एक सूची चयन विधि या कुछ ओवरराइड करते हैं, जो आपके माता-पिता के रूप में अन्य चीजों का उपयोग करता है।

घटनाओं के साथ: आपका फॉर्म किसी उपयोगकर्ता को कुछ चुनने के लिए ईवेंट के लिए सुनता है, और फ़ॉर्म पर अन्य चीजों का उपयोग करता है।

अंतर यह है कि बिना किसी घटना के मामले में आपने एक एकल उद्देश्य वर्ग बनाया है, और यह भी जो पर्यावरण से कड़े रूप से बाध्य है, वह उम्मीद करता है। घटनाओं के मामले में, कोड जो आपके द्वारा कुशलतापूर्वक उपयोग करता है फ़ॉर्म आपके फॉर्म में स्थानीयकृत है, और सूची बॉक्स बस, एक सूची बॉक्स है।

1

तुम हमेशा भेजने/घटनाओं प्राप्त करने, सदस्यता लेने/घटना सूत्रों के सदस्यता समाप्ति के अपने अपने तरीके से बना सकता है। लेकिन भाषा आपको ऐसा करने का एक सरल/मानक तरीका देती है, इसलिए यह आपकी खुद की घटनाओं की तकनीक के बजाय भाषा "घटनाओं" का उपयोग करने का एक अच्छा कारण है।

इसके अलावा, "घटनाओं" भाषा का उपयोग करके आप प्रतिबिंब का उपयोग करके सभी प्रकार की अच्छी चीजें करने की अनुमति देते हैं क्योंकि यह मानकीकृत है।

एक ईवेंट तकनीक का उपयोग क्यों करना है। सभी प्रकार के वास्तविक जीवन उदाहरण हैं जहां यह घटनाओं का उपयोग करने के लिए काफी उपयोगी और सरल है। विंडोज संदेश की तुलना में घटनाएं उनकी उपयोगीता में लगभग समान हैं।

1

सबसे बुनियादी वैचारिक स्तर पर, घटनाएं कंप्यूटर से जो प्रतिक्रिया करती हैं, उसके प्रति प्रतिक्रिया करने के बजाय कंप्यूटर आपके द्वारा किए गए कार्यों पर प्रतिक्रिया करने देता है। जब आप अपने पीसी के सामने बैठे कई अनुप्रयोगों (ऑपरेटिंग सिस्टम समेत) के साथ बैठे हैं, और आपके लिए चुनने के लिए प्रत्येक संदर्भ में कई क्लिक करने योग्य ऑब्जेक्ट्स उपलब्ध हैं, तो ईवेंट तब होता है जब आप एक चुनते हैं और इसमें शामिल सभी टुकड़े हो सकते हैं ठीक से अधिसूचित

यहां तक ​​कि अपने माउस को चारों ओर ले जाना घटनाओं की धारा को बंद कर देता है (उदाहरण के लिए कर्सर को स्थानांतरित करने के लिए)।

5

* इस सवाल का शरीर में हुआ करता था:

यहाँ एक लेख का लिंक है कि इस तरह का वर्णन करता है एक ऐप का उदाहरण जो घटनाओं का उपयोग करता है (अनुमान है कि यह वास्तव में भी परीक्षण में मदद करता है?)

विचार अब तक हैं:

घटनाओं का उपयोग क्यों करें या प्रकाशित/सदस्यता लें?

किसी ईवेंट को उठाए जाने पर कक्षाओं की किसी भी संख्या को अधिसूचित किया जा सकता है।

सदस्यता लेने वर्गों पता है कि कैसे 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

चीयर्स से है।

संबंधित मुद्दे