अनुशंसित, 2020

संपादक की पसंद

C # में प्रतिनिधि और घटनाओं के बीच अंतर

इवेंट-संचालित कार्यक्रम में दोनों का उपयोग करते हुए और एक महत्वपूर्ण भूमिका निभाते हैं। प्रतिनिधि एक विधि का उल्लेख कर सकते हैं, और यह C ++ में फ़ंक्शन पॉइंटर के समान है। इवेंट सूचित करते हैं कि कुछ कार्रवाई की गई है। प्रतिनिधियों और घटनाओं के बीच मूल अंतर यह है कि प्रतिनिधि विधियों के संदर्भ को धारण करते हैं और घटना प्रतिनिधियों को उपयोग करते हुए उस पद्धति तक पहुंचने का एक तरीका प्रदान करती है।

तुलना चार्ट

तुलना के लिए आधारप्रतिनिधियोंआयोजन
बुनियादीएक प्रतिनिधि एक विधि का संदर्भ रखता है।घटना प्रतिनिधियों को प्रदान की जाने वाली अति-स्तरीय अमूर्तता है।
वाक्य - विन्यासडेलीगेट return_type डेलीगेट_नाम (पैरामीटर_लिस्ट);घटना event_delegate event_name;
कीवर्डएक प्रतिनिधि को एक कीवर्ड "प्रतिनिधि" का उपयोग करके घोषित किया जाता है।एक ईवेंट "कीवर्ड" इवेंट का उपयोग करके घोषित किया जाता है।
घोषणाकिसी भी वर्ग के बाहर एक प्रतिनिधि घोषित किया जाता है।एक घटना एक वर्ग के अंदर घोषित की जाती है।
आह्वानएक विधि को लागू करने के लिए इसे प्रतिनिधि को संदर्भित करना होगा।एक विधि को लागू करने के लिए इसे घटना को सौंपा जाना चाहिए।
कोवरियनस और कंट्रावेरियनवे प्रतिनिधियों को लचीलापन प्रदान करते हैं।ऐसी कोई अवधारणा नहीं।
इवेंट एक्सेसरऐसी कोई अवधारणा नहीं।घटना संचालकों की सूची का प्रबंधन करता है।
निर्भरताप्रतिनिधि घटनाओं से स्वतंत्र हैं।प्रतिनिधि के बिना घटना नहीं बनाई जा सकती।

डेलिगेट्स की परिभाषा

C # प्रतिनिधियों में एक विधि को संदर्भित करने के लिए एक फ़ंक्शन पॉइंटर के रूप में उपयोग किया जाता है। यह विशेष रूप से एक ऑब्जेक्ट है जो एक विधि को संदर्भित करता है जिसे इसे सौंपा गया है। एक ही प्रतिनिधि का उपयोग विभिन्न तरीकों को संदर्भित करने के लिए किया जा सकता है, क्योंकि यह विभिन्न तरीकों के संदर्भ को धारण करने में सक्षम है, लेकिन एक समय में एक। रनटाइम में प्रतिनिधि द्वारा किस विधि को निर्धारित किया जाएगा। एक प्रतिनिधि घोषित करने का वाक्य विन्यास इस प्रकार है:

 डेलीगेट return_type डेलीगेट_नाम (पैरामीटर_लिस्ट); 

यहां, return_type विधि द्वारा लौटाए गए मूल्य के प्रकार को घोषित करता है, जिसे प्रतिनिधि द्वारा बुलाया जाता है और प्रतिनिधि_नाम प्रतिनिधि का नाम है। पैरामीटर_लिस्ट प्रतिनिधि द्वारा बुलाए जाने वाले तरीकों से आवश्यक पैरामीटर की सूची को परिभाषित करेगा।

प्रतिनिधियों के बारे में याद रखने योग्य कुछ महत्वपूर्ण बिंदु हैं। यह किसी भी विधि को अपने हस्ताक्षर और रिटर्न प्रकार से मेल कर सकता है। एक प्रतिनिधि एक आवृत्ति विधि या एक स्थिर विधि दोनों को कॉल कर सकता है। यदि यह एक आवृत्ति विधि कहता है, तो इसे विधि को लागू करने के लिए वस्तु की सहायता लेनी होगी। प्रतिनिधि मल्टीकास्टिंग का समर्थन करते हैं यानी आप उन तरीकों को चेन कर सकते हैं जो स्वचालित रूप से कहलाएंगे जब प्रतिनिधि उनके पास भेजा जाता है। आपको बस एक प्रतिनिधि ऑब्जेक्ट बनाना है और "+ =" ऑपरेटर का उपयोग करके श्रृंखला के लिए एक के बाद एक तरीकों को असाइन करना है। आप "- =" ऑपरेटर का उपयोग करके एक विधि भी खोल सकते हैं।

प्रतिनिधि में अतिरिक्त लचीलेपन को जोड़ने वाली विशेषताएं कोवरियनस और कॉन्ट्रैवेरियन हैं। Covariance और Contravariance उस स्थिति की अनुमति देते हैं, जहां प्रतिनिधि को दिए गए तरीके और वापसी के तरीके और हस्ताक्षर प्रतिनिधि से भिन्न होते हैं।

  • Covariance आपको प्रतिनिधि को एक विधि निर्दिष्ट करने की अनुमति देता है जहाँ वापसी का तरीका एक वर्ग है जो उस वर्ग से प्राप्त होता है जो प्रतिनिधि के वापसी प्रकार को निर्दिष्ट करता है।
  • Contravariance आपको प्रतिनिधि को एक विधि निर्दिष्ट करने की अनुमति देता है जहां पैरामीटर प्रकार विधि वर्ग का एक आधार वर्ग है जो प्रतिनिधि के पैरामीटर के रूप में निर्दिष्ट है।

घटनाक्रम की परिभाषा

इवेंट्स वह क्रिया होती है जो किसी ऑब्जेक्ट की स्थिति को बदल देती है। घटनाओं को प्रतिनिधियों का उपयोग करके घोषित किया जाता है, प्रतिनिधियों की उपस्थिति के बिना आप घटनाओं की घोषणा नहीं कर सकते। आप कह सकते हैं कि एक घटना प्रतिनिधियों को इनकैप्सुलेशन प्रदान करती है। ईवेंट और ईवेंट हैंडलर के साथ होने वाली घटनाओं से निपटने के दौरान दो महत्वपूर्ण यौगिक होते हैं। यदि ऑब्जेक्ट्स इवेंट में रुचि रखते हैं, तो यह उस विशेष ईवेंट के लिए एक इवेंट हैंडलर को पंजीकृत करता है। और जब भी घटनाओं को निकाल दिया जाता है तो पंजीकृत इवेंट हैंडलर को बुलाया जाता है। घटना की घोषणा इस प्रकार है:

 घटना event_delegate event_name; 

यहां, "ईवेंट" एक कीवर्ड है जो किसी ईवेंट की घोषणा दर्शाता है। अगला, event_delegate उस प्रतिनिधि का नाम दिखाता है जो इवेंट का समर्थन कर रहा है। फिर, event_name इवेंट का नाम है

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

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

C # में प्रतिनिधि और घटनाओं के बीच महत्वपूर्ण अंतर

  1. डेलिगेट एक ऑब्जेक्ट है जिसका उपयोग फ़ंक्शन पॉइंटर के रूप में एक विधि के संदर्भ को रखने के लिए किया जाता है। दूसरी ओर, घटनाएँ प्रतिनिधियों को एक अमूर्तता प्रदान करती हैं।
  2. प्रतिनिधि घोषित करने के लिए आवश्यक कीवर्ड एक प्रतिनिधि होता है, जबकि किसी घटना को घोषित करने के लिए आवश्यक कीवर्ड घटना है।
  3. एक प्रतिनिधि को एक कक्षा के बाहर घोषित किया जाता है, जबकि एक घटना को एक कक्षा के अंदर घोषित किया जाता है।
  4. किसी प्रतिनिधि ऑब्जेक्ट का उपयोग करते हुए विधि को लागू करने के लिए, विधि को प्रतिनिधि ऑब्जेक्ट को संदर्भित करना होगा। दूसरी ओर, किसी ईवेंट ऑब्जेक्ट का उपयोग करते हुए विधि को लागू करने के लिए विधि को ऑब्जेक्ट को संदर्भित करना होगा।
  5. Covariance और Contravariance प्रतिनिधि वस्तुओं को अतिरिक्त लचीलापन प्रदान करते हैं। दूसरी ओर, घटना की ऐसी कोई अवधारणा नहीं है।
  6. इवेंट एक्सेसर इवेंट हैंडलर की सूची को संभालता है जबकि प्रतिनिधि के पास ऐसी कोई अवधारणा नहीं है।
  7. प्रतिनिधि घटनाओं पर स्वतंत्र होते हैं लेकिन, प्रतिनिधि के बिना घटनाओं का निर्माण नहीं किया जा सकता है।

निष्कर्ष:

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

Top