2010-12-02 13 views
5

मैंने अपनी कई परियोजनाओं में घटनाओं और प्रतिनिधियों का उपयोग किया, लेकिन फिर भी मुझे अपने दिमाग में कुछ संदेह हैं कि एक परियोजना में घटनाओं और प्रतिनिधियों का उपयोग करना है और के बीच एक प्रतिनिधि और एक घटना के बीच क्या अंतर है। क्या कोई इसे समझा सकता है कृप्या?घटनाओं और प्रतिनिधियों का उपयोग कहां करें?

+0

यहां अच्छा स्पष्टीकरण: http://blog.monstuff.com/archives/000040.html – SubniC

+0

एक कार्यक्रम केवल प्रतिनिधि का एक विशेष रूप है। – VVS

+0

संभावित डुप्लिकेट [घटनाओं और प्रतिनिधियों और उसके संबंधित अनुप्रयोगों के बीच अंतर] (http://stackoverflow.com/questions/563549/difference-between-events-and-delegates-and-its-respective-plplications) –

उत्तर

8

Delegate एक प्रकार है जो एक विधि कॉल को समाहित कर सकता है। जब आप किसी ऑब्जेक्ट के रूप में विधि का इलाज करना चाहते हैं और उसे पास करना चाहते हैं तो आपको एक प्रतिनिधि का उपयोग करना चाहिए।

एक Event एक प्रतिनिधि के रूप में एक प्रतिनिधि को उजागर करने का एक तरीका है जिस पर आपकी कक्षा के बाहर कोई भी कोड उनके हैंडलर संलग्न कर सकता है लेकिन प्रतिनिधि को नहीं बुला सकता है। यदि आप अपने प्रतिनिधि को सार्वजनिक संपत्ति के रूप में बेनकाब करते हैं, तो आपकी कक्षा के बाहर कोड न केवल अपने हैंडलर संलग्न कर सकता है बल्कि प्रतिनिधि को भी बुला सकता है।

इसके अलावा घटनाएं आपको हटाए गए तरीकों को जोड़ने की अनुमति देती हैं जिन्हें हैंडलर से जुड़े हुए हैं, जैसे कि सार्वजनिक संपत्ति के गेटर और सेटटर की तरह, आप प्रक्रिया को बेहतर तरीके से नियंत्रित करने की अनुमति देते हैं।

आपको ईवेंट का उपयोग करना चाहिए जब आप अन्य कक्षाओं को अपनी कक्षा में किसी ईवेंट की सदस्यता लेना चाहते हैं और ऐसा होने पर अधिसूचित किया जाना चाहिए।

public delegate void MyMessageHandlerType(string message); 

public class EventTest 
{ 
    public event MyMessageHandlerType MessageEvent 
    { 
     add { } // invoked when MessageEvent += SomeMethod 
     remove { } // invoked when MessageEvent -= SomeMethod 
    } 
} 
2

दोनों प्रतिनिधि और कार्यक्रम कॉलबैक तंत्र प्रदान करते हैं। एक घटना एक कॉलबैक तंत्र प्रदान करती है जो कि में किसी भी प्रकार के संलग्न हैंडलर में हो सकती है, और यह कोड अक्सर हैंडलर की संख्या (यदि कोई हो) की परवाह किए बिना समान तरीके से काम करता है। एक अच्छा उदाहरण एक खिड़की की Resized घटना हो सकती है; खिड़की का आकार बदलना काम करेगा चाहे कोई ईवेंट हैंडलर जुड़ा हुआ हो या नहीं; घटना एक अधिसूचना तंत्र है।

एक प्रतिनिधि कई इंद्रियों में अधिक जुड़ा हुआ है। आम तौर पर आप एक प्रतिनिधि सदस्य के साथ बिल्कुल एक विधि को जोड़ सकते हैं, और अक्सर उनकी अपेक्षा की जाती है; उदाहरण के लिए LINQ एक्सटेंशन विधियां (जैसे Where) लें: वे तब तक काम नहीं करेंगे जब तक आप प्रतिनिधि पैरामीटर के लिए बिल्कुल एक विधि प्रदान नहीं करते।

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