अपनी सी # बराबर के विपरीत, VB.NET में RaiseEvent
अगर कोई श्रोताओं हैं नहीं एक अपवाद बढ़ा देंगे, यह बहुत पहले शून्य जांच करने के लिए कड़ाई से जरूरी नहीं है।
लेकिन यदि आप वैसे भी ऐसा करना चाहते हैं, तो इसके लिए एक वाक्यविन्यास है। आपको ईवेंट के नाम के अंत में प्रत्यय के रूप में Event
जोड़ने की आवश्यकता है। उदाहरण के लिए (यदि आप ऐसा नहीं करते हैं, तो आप एक संकलक त्रुटि प्राप्त होगी।):
If ChangedEvent IsNot Nothing Then
RaiseEvent Changed(Me, EventArgs.Empty)
End If
जैसा कि मैंने ऊपर कहा, हालांकि, मैं वास्तव में यकीन है कि ऐसा करने के लिए किसी भी वास्तविक लाभ है अगर वहाँ नहीं हूँ। यह आपके कोड को गैर-मूर्खतापूर्ण और पढ़ने में अधिक कठिन बनाता है। मैं जिस चाल को यहां प्रस्तुत करता हूं वह विशेष रूप से अच्छी तरह से प्रलेखित नहीं है, संभवतः RaiseEvent
कीवर्ड का पूरा बिंदु पृष्ठभूमि में आपके लिए यह सब संभालना है। यह वीबीएनईटी भाषा के दो डिजाइन लक्ष्यों, इस तरह से अधिक सुविधाजनक और सहज है।
एक अन्य कारण आपको शायद इसे स्वचालित रूप से संभालने के लिए छोड़ देना चाहिए क्योंकि यह सी # रास्ता करते समय इसे सही करना मुश्किल है। आपके द्वारा दिखाए गए उदाहरण स्निपेट में वास्तव में दौड़ की स्थिति होती है, जो बग होने का इंतजार कर रहा है। अधिक विशेष रूप से, यह थ्रेड-सुरक्षित नहीं है। आपको एक अस्थायी चर बनाना है जो ईवेंट हैंडलर के वर्तमान सेट को कैप्चर करता है, फिर शून्य जांच करें। कुछ इस तरह:
EventHandler tmp = Changed;
if (tmp != null)
{
tmp(this, EventArgs.Empty);
}
एरिक Lippert इस here के बारे में बहुत ब्लॉग लेख, this Stack Overflow question से प्रेरित है।
दिलचस्प है, अगर आप VB.NET कोड कि RaiseEvent
कीवर्ड का इस्तेमाल करता disassembled जांच करते हैं, आप पाएंगे कि यह वास्तव में क्या ऊपर सही सी # कोड करता है क्या कर रहा है: एक अस्थायी चर वाणी, एक अशक्त जाँच करता है, और फिर प्रतिनिधि को आमंत्रित करता है। हर बार इस के साथ अपने कोड को अव्यवस्थित क्यों करें?
स्रोत
2013-05-23 11:30:49
http://msdn.microsoft.com/en-us/library/fwd3bwed%28v=vs.110%29.aspx – VikciaR