आधार गलत है; यह ठीक काम करता है:
Func<int> func = delegate { Console.WriteLine("first part"); return 5; };
func += delegate { Console.WriteLine("second part"); return 7; };
int result = func();
यह गैर-शून्य परिणाम वाला एक मल्टीकास्ट प्रतिनिधि है, ठीक काम कर रहा है। आप कंसोल से देख सकते हैं कि दोनों भागों को निष्पादित किया गया। का परिणाम अंतिम आइटम एक लौटा दिया गया है। हम प्रदर्शन कर सकते हैं कि यह एक सच बहुस्त्र्पीय प्रतिनिधि है:
if(func is MulticastDelegate) Console.WriteLine("I'm multicast");
और यह लिखेंगे "मैं बहुस्त्र्पीय हूँ" सिर्फ पहली पंक्ति के बाद भी (जब वहाँ केवल एक ही सूचीबद्ध विधि है)।
आप अलग-अलग परिणाम पर अधिक नियंत्रण की जरूरत है, तो GetInvocationList()
का उपयोग करें:
foreach (Func<int> part in func.GetInvocationList())
{
int result = part();
}
जो आप प्रत्येक व्यक्ति के परिणाम देखने के लिए अनुमति देता है।
आईएल शब्दावली में:
.class public auto ansi sealed Func<+ TResult>
extends System.MulticastDelegate`
जो कहना है: MulticastDelegate
से Func<T>
इनहेरिट करती है। असल में, सभी उद्देश्यों और उद्देश्यों के लिए, सभी .NET में प्रतिनिधि मल्टीकास्ट प्रतिनिधि हैं। आप प्रबंधित C++ में गैर-मल्टीकास्ट प्रतिनिधि प्राप्त करने में सक्षम हो सकते हैं, मुझे नहीं पता। लेकिन निश्चित रूप से सी # से नहीं।
स्रोत
2012-09-21 12:45:24
क्या आप एक उदाहरण प्रदान कर सकते हैं जहां यह अपवाद फेंकता है? –