मैं थोड़ी सी सी # के लिए नया हूं, इसलिए मैं इस समस्या के साथ आया। प्रश्न: func2 क्यों कहा जाता है? ओह, और एक और बात। कहते हैं कि मैं एक प्रतिनिधि को एक समारोह जोड़ता हूं। इस फ़ंक्शन में मैं एक और प्रतिनिधि को कॉल करता हूं, हालांकि मैं यह सुनिश्चित करना चाहता हूं कि पहले प्रतिनिधि को जोड़ा गया हर दूसरे फ़ंक्शन को इस प्रतिनिधि को कॉल करने से पहले कहा जाता है, क्या कोई साफ समाधान है (वास्तव में getInvocationList में दिलचस्पी नहीं है)। धन्यवाद दोस्तों, आप सबसे अच्छे हैं।सी # प्रतिनिधि काम नहीं कर रहा है?
class Program
{
delegate void voidEvent();
voidEvent test;
private void func1()
{
Console.Write("func1");
test -= func2;
}
private void func2()
{
Console.WriteLine("func2");
}
static void Main(string[] args)
{
Program p = new Program();
p.test += p.func1;
p.test += p.func2;
p.test();
}
}
+1। हाँ। यही कारण है कि आप 'var func = p.test लिख सकते हैं; अगर (func! = null) {func(); } 'कुछ भी लॉक किए बिना multithreading परिदृश्य में। चूंकि 'func'' p.test' की एक प्रति है और 'p.test' में किए गए परिवर्तनों की परवाह नहीं करता है। –
लेकिन जब मैं test- = func2 कॉल करता हूं और getinvocationlist पर कॉल करता हूं तो मैं देख सकता हूं कि func2 सूची में और नहीं है। तो आप कह रहे हैं कि प्रत्येक प्रतिनिधि के पास दो सूचियां हैं, जिन्हें वर्तमान में बुलाया जा रहा है (और पहुंच योग्य नहीं है) और एक जिसे अगली बार बुलाया जाएगा? – Yamcha
@ user1316459, इसमें वास्तव में दो सूचियां नहीं हैं। लेकिन जब आप दायर से प्रतिनिधि का आह्वान करते हैं, तो आप प्रभावी रूप से कुछ ऐसा कहते हैं: "फ़ील्ड का मान * अभी * लें और फिर उसे आमंत्रित करें"। इसका मतलब है कि आप 'test' के मान की प्रतिलिपि बना रहे हैं, न कि' test'। – svick