संभव डुप्लिकेट:
Is there a downside to adding an anonymous empty delegate on event declaration?क्या हमेशा एक खाली ईवेंट हैंडलर जोड़ना ठीक है?
निम्नलिखित पैटर्न काफी आम है जब ईवेंट हैंडलर्स (सी # में) का उपयोग:
public event Action handler;
…
// some method:
if(handler != null) handler();
वहाँ एक खाली बताए के किसी भी कमियां हैं इस घटना के लिए प्रतिनिधि? यह हर जगह if !=null
स्थिति को बचाएगा, जहां ईवेंट निकाल दिया गया है। बेशक, यह केवल तभी लागू होता है, जब हम गारंटी नहीं दे सकते कि घटना हमेशा एक उचित प्रतिनिधि को सौंपी जाती है।
public event Action handler;
…
// in constructor:
handler +=()=>{};
…
// some method:
handler();
निश्चित रूप से, थोड़ा सा प्रदर्शन मारा गया है, लेकिन यह कोड को अधिक क्लीनर बनाता है। ऐसे मामले में सबसे अच्छा अभ्यास क्या है? कोई तकनीकी नुकसान?
मेरे दृष्टिकोण से एक अच्छा अभ्यास नहीं है। हां, आप एक शून्य जांच को बचाते हैं, लेकिन कुछ महीने बाद, बग या रखरखाव के लिए कोड का निरीक्षण करते समय, पहला उदाहरण कोड के उद्देश्य को बेहतर ढंग से प्रदर्शित करता है। – Steve
यह और भी बदतर हो जाता है - सुरक्षा के बिना, 'हैंडलर' को शून्य के लिए जांचने और इसे आमंत्रित करने के बीच शून्य पर सेट किया जा सकता है। आपको 'हैंडलर' के मान को स्थानीय चर में कॉपी करना चाहिए और शून्य के लिए _that_ की जांच करनी चाहिए। –
आपका पहला कोड टूटा हुआ है क्योंकि आप 'हैंडलर' के मान को स्थानीय चर में कॉपी नहीं करते हैं। – CodesInChaos