2010-05-24 24 views
5

मैंने अभी क्लोन को आईसीएलनेबल से कार्यान्वित किया और महसूस किया कि मेरे स्रोत उदाहरण से ईवेंट सदस्यता भी पालन की गई है। क्या उन सभी को साफ़ करने का कोई अच्छा तरीका है?सभी ईवेंट सदस्यता साफ़ करें (क्लोन लिंक)

वर्तमान में मैं प्रत्येक घटना के लिए इन दो लूपों का उपयोग कर रहा हूं, मुझे सब कुछ साफ़ करना है।

foreach (var eventhandler in OnIdChanged.GetInvocationList()) 
{ 
    OnIdChanged -= (ItemEventHandler) eventhandler; 
} 

foreach (var eventhandler in OnNameChanged.GetInvocationList()) 
{ 
    ... 

यह ठीक काम करता है लेकिन कोड को थोड़ी सी अव्यवस्थित करता है। घटना को लटकने के लिए ज्यादातर चिंतित।

उत्तर

1

मुझे लगता है कि आप अपने क्लोन ऑब्जेक्ट में OnIdChanged = null सेट कर सकते हैं।

क्लोन बनाने के बाद आप क्लोन पर ClearEvents विधि को कॉल करें।

public class ClonedObject 
{ 
    public event EventHandler OnIdChanged; 
    public event EventHandler OnNameChanged; 

    public void ClearEvents() 
    { 
     OnIdChanged = null; 
     OnNameChanged = null; 
    } 
} 
+0

यह काम करता है इसलिए मैं अंकन के रूप में चिह्नित हूं। हालांकि मैं रैंडोल्फो – mattias

+1

@ मैटियास के उत्तर के बाद एक रिफैक्टरिंग पर विचार कर रहा हूं, मैंने अभी आपके प्रश्न पर विचार किया है और मेरे जवाब में आपके समाधान का निहितार्थ नहीं है। रैंडोल्फो ने क्या सुझाव दिया है शायद बेहतर है। –

+0

यह अभी भी छोटी दौड़ में मदद करता है। धन्यवाद! – mattias

2

मुमकिन है, यदि आप वास्तव में एक वस्तु क्लोन करने के लिए चाहता था, आप करना चाहता था रखने उन घटना सदस्यता।

यदि आप ऐसी वस्तुओं को क्लोन कर रहे हैं जिन्हें घटनाओं की सदस्यता नहीं लेनी चाहिए, तो ऐसा लगता है कि आपको अपने कोड को दोबारा करने पर विचार करना चाहिए। अपने नियंत्रक या समान ऑब्जेक्ट्स को समर्पित डेटा ऑब्जेक्ट के संदर्भ में ईवेंट की सदस्यता लें और अपने डेटा ऑब्जेक्ट्स को उस डेटा को ईवेंट के संदर्भ में संग्रहीत करें; डेटा ऑब्जेक्ट्स क्लोन करें और आवश्यकतानुसार उचित नियंत्रक ऑब्जेक्ट्स में रखें।

आखिरकार, मैं सुझाव दे रहा हूं कि आप उन घटनाओं की सदस्यता न लें, जिनके लिए आपको सब्सक्राइब करने की आवश्यकता नहीं है। एक अलग कोण से समस्या अंतरिक्ष को देखो।

+1

मैंने एक ही बात सोचा जब मैंने प्रश्न पढ़ा। क्लोन() का तात्पर्य है कि आप वास्तव में वस्तु, घटनाओं और सभी को क्लोन कर रहे हैं। –

संबंधित मुद्दे