अद्यतन (टिप्पणी करने वालों के लिए धन्यवाद): प्रतिनिधि प्रतिरक्षा का मतलब है कि क्लोनिंग एक असाइनमेंट पर कुछ भी हासिल नहीं करता है।
जब एक लिखते हैं:
myDelegate += AHandler
एक पूरी तरह से नए प्रतिनिधि उदाहरण बनाया और myDelegate को सौंपा गया है।
इसलिए, नीचे दिया गया कोड क्लोन कॉल के बिना बिल्कुल वही काम करेगा।
मल्टीकास्टडिलेगेट (अंतर्निहित प्रकार) में क्लोन विधि है।
अंतर्निहित प्रतिनिधि को प्राप्त करने में सक्षम होने के लिए आपको सामान्य हेल्पर से बचने की आवश्यकता हो सकती है कि ईवेंट कीवर्ड उत्पन्न होता है, और चीजों को सीधे प्रबंधित करता है (कस्टम जोड़ें और एक्सेसर्स को हटाएं)।
इस दिखाने के लिए:
class Program {
public delegate void MyDelegate(string name);
public event MyDelegate EventOne;
public void HandlerOne(string name) {
Console.WriteLine("This is handler one: {0}", name);
}
public void HandlerTwo(string name) {
Console.WriteLine("This is handler two: {0}", name);
}
public void HandlerThree(string name) {
Console.WriteLine("This is handler three: {0}", name);
}
public void Run() {
EventOne += HandlerOne;
EventOne += HandlerTwo;
Console.WriteLine("Before clone");
EventOne("EventOne");
MyDelegate eventTwo = (MyDelegate)EventOne.Clone();
MyDelegate eventTwo = EventOne;
Console.WriteLine("After
clone
copy");
EventOne("EventOne");
eventTwo("eventTwo");
Console.WriteLine("Change event one to show it is different");
EventOne += HandlerThree;
EventOne("EventOne");
eventTwo("eventTwo");
}
static void Main(string[] args) {
(new Program()).Run();
}
}
इसे इंगित करने के लिए धन्यवाद। यह मेरे अपने कोड में घटनाओं के लिए सबसे अच्छा है। – weiqure
इसके लिए बहुत बहुत धन्यवाद। बाइनरी सीरियलाइजेशन के माध्यम से ऑब्जेक्ट क्लोनिंग के लिए मुझे सब्स्क्राइब किए गए कार्यक्रमों का आनंद लेने के लिए एक अच्छा कामकाज की आवश्यकता नहीं थी, अन्यथा मुझे कई सौ वर्गों में आईसीएलनेबल को लागू करना होगा। – user1039513