कोड की निम्न दो पंक्तियों लगभग बराबर हैं:
public event EventHandler<EmployeeEventAgs> Leave;
अंतर ईवेंट हैंडलर विधि के हस्ताक्षर में है:
public event Action<EmployeeEventAgs> Leave;
के रूप में करने का विरोध किया। आप कार्रवाई के साथ पहला तरीका अपनाते हैं, आप हो सकता है:
public void LeaveHandler(EmployeeEventAgs e) { ... }
और फिर इस:
obj.Leave += LeaveHandler;
दूसरे दृष्टिकोण के साथ
, LeaveHandler
जरूरतों के हस्ताक्षर अलग होने की:
public void LeaveHandler(object sender, EmployeeEventAgs e) { ... }
यह बहुत महत्वपूर्ण नोटिस वें है दोनों मामलों में event
कीवर्ड मौजूद है। event
कीवर्ड के माध्यम से स्पष्ट रूप से घोषित एक कार्यक्रम अब कक्षा का क्षेत्र नहीं है। इसके बजाय यह ईवेंट संपत्ति बन जाता है। घटना गुण नियमित गुणों के समान होते हैं, सिवाय इसके कि उनके पास get
या set
एक्सेसर्स नहीं हैं। कंपाइलर उन्हें +=
और -=
असाइनमेंट के बाएं तरफ उपयोग करने की अनुमति देता है (एक ईवेंट हैंडलर जोड़ना या निकालना)। पहले से असाइन किए गए ईवेंट हैंडलर, या को उस कक्षा के बाहर ईवेंट को आमंत्रित करने का कोई तरीका नहीं है जो घोषित करता है।
तो घटना कीवर्ड दोनों उदाहरणों में याद आ रही थी, तो आप कोई त्रुटि या चेतावनी के साथ निम्न कार्रवाई कर सकता है:
obj.Leave = LeaveHandler;
जो किसी भी पंजीकृत संचालकों मिटा सकते हैं और उन्हें LeaveHandler
withe की जगह लेगा।
इसके अलावा, आप भी इस कॉल कर सकते हैं: यदि आप एक ईवेंट बनाने का इरादा
obj.Leave(new EmployeeEventAgs());
दो उपरोक्त उदाहरण, एक विरोधी पैटर्न माना जाता है। एक ईवेंट को केवल स्वामी ऑब्जेक्ट द्वारा बुलाया जाना चाहिए और अवांछनीय ग्राहकों को हटाने की अनुमति नहीं देनी चाहिए। event
कीवर्ड .NET का प्रोग्रामेटिक निर्माण है जो आपको ईवेंट के सही उपयोग से चिपकने में मदद करता है।
उपरोक्त दिमाग में, मेरा मानना है कि कई लोग EventHandler
दृष्टिकोण तक चिपके रहते हैं क्योंकि event
कीवर्ड के बिना EventHandler
का उपयोग करने की संभावना अधिक नहीं है। कार्रवाइयों के उपयोग के व्यापक दायरे हैं, वे घटनाओं के रूप में उपयोग किए जाने पर स्वाभाविक रूप से नहीं दिखते हैं। उत्तरार्द्ध, निश्चित रूप से, एक व्यक्तिगत राय है, क्योंकि घटना कोडर दृष्टिकोण संभवतः मेरे कोडिंग प्रथाओं में बहुत कठिन हो गया है। फिर भी, अगर कार्रवाई ठीक से उपयोग की जाती है, तो घटनाओं के लिए उनका उपयोग करने का अपराध नहीं है।
यह अच्छी सलाह है, लेकिन मुझे नहीं लगता कि यह –
प्रश्न का उत्तर देता है क्या आपने उद्देश्य के लिए 'छोड़ने वाले हैंडलर को प्रतिनिधि के रूप में घोषित किया था: सार्वजनिक __event__ EventHandler <> ... उद्देश्य पर? जब आप ईवेंट को उजागर करने वाले वर्ग के साथ काम करते हैं तो 'इवेंट' कीवर्ड काफी गेम परिवर्तक होता है, क्योंकि इसके बिना कोई भी' obj.Leave = someHandler' 'obj.Leave + = someHandler के बजाय पूरे ईवेंट संग्रह को मिटा सकता है। ' –
नहीं, यह एक गलती थी। तीन साल में कोई भी नहीं देखा :) धन्यवाद! –