हाँ। { add; remove; }
हिस्सा है और समर्थन प्रतिनिधि क्षेत्र से छुटकारा और आप सुनहरा कर रहे हैं:
public event EventHandler UpdateErrorIcons;
यह है कि!
मुझे यह प्रश्न पूछने से पहले बस इसे जोड़ने दें, मैंने इस तथ्य के बारे में भी सोचा नहीं था कि घटनाओं का स्वत: कार्यान्वित संस्करण गुणों के साथ असंगत है। व्यक्तिगत रूप से, मैं वास्तव में पसंद करूंगा यदि ऑटो-कार्यान्वित घटनाओं ने आपके प्रश्न में पहली बार प्रयास किया था। यह अधिक सुसंगत होगा, और यह मानसिक अनुस्मारक के रूप में भी कार्य करेगा कि घटनाएं प्रतिनिधि फ़ील्ड के समान नहीं हैं, जैसे गुण नियमित फ़ील्ड के समान नहीं हैं।
ईमानदारी से, मुझे लगता है कि आप दुर्लभ अपवाद हैं जहां आप वास्तव में कस्टम वाक्यविन्यास पहले के बारे में जानते थे। बहुत से .NET डेवलपर्स के पास कोई संकेत नहीं है कि आपके add
और remove
विधियों को लागू करने का विकल्प है।
अद्यतन: बस मन की अपनी खुद की शांति के लिए, मैं Reflector का उपयोग कर पुष्टि की है कि सी # 4 में ईवेंट की डिफ़ॉल्ट कार्यान्वयन (यानी, कार्यान्वयन उत्पन्न हो जाता है कि जब आप स्वत: लागू किया जाना मार्ग) इस के बराबर है:
private EventHandler _updateErrorIcons;
public event EventHandler UpdateErrorIcons
{
add
{
EventHandler current, original;
do
{
original = _updateErrorIcons;
EventHandler updated = (EventHandler)Delegate.Combine(original, value);
current = Interlocked.CompareExchange(ref _updateErrorIcons, updated, original);
}
while (current != original);
}
remove
{
// Same deal, only with Delegate.Remove instead of Delegate.Combine.
}
}
ध्यान दें कि ऊपर ताला मुक्त तुल्यकालन को प्रभावी ढंग से add
और remove
कॉल क्रमानुसार करने का इस्तेमाल करता है। तो यदि आप नवीनतम सी # कंपाइलर का उपयोग कर रहे हैं, तो आपको add
/remove
सिंक्रनाइज़ेशन के लिए भी लागू करने की आवश्यकता नहीं है।
स्रोत
2011-02-10 16:26:39
जो वास्तव में मजेदार है, अधिकांश लोगों ने कभी भी विस्तारित कोड के बारे में कभी नहीं सुना है :) – Andrey
हाँ, भले ही मैंने लोगों को यह देखा है, मैंने व्यक्तिगत रूप से इसका उपयोग कभी नहीं किया, संकलक इसे बाद में जोड़ता है। –