Func
प्रतिनिधियों का परिवार (या Action
उस मामले के लिए) कुछ और नहीं बल्कि साधारण प्रतिनिधि प्रकारों को घोषित किया जाता है
//.NET 4 and above
public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T obj)
//.NET 3.5
public delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
public delegate TResult Func<T1, T2, T3, TResult>(T1 obj1, T2 obj2, T3 obj3)
आदि के रूप में इस तरह के बाहर / रेफरी पैरामीटर हो सकता है, इसलिए अपने मामले में अपने आप ही कस्टम कार्यान्वयन के एक मामले के रूप में अन्य जवाब बताया है। जैसे कि Microsoft ने इसे डिफ़ॉल्ट रूप से क्यों नहीं पैक किया, सोचें कि इसके लिए कितने संयोजन की आवश्यकता होगी।
delegate TResult Func<T1, T2, TResult>(T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, T2 obj2)
delegate TResult Func<T1, T2, TResult>(T1 obj1, out T2 obj2)
delegate TResult Func<T1, T2, TResult>(out T1 obj1, out T2 obj2)
सिर्फ दो मापदंडों के लिए। हमने छुआ भी नहीं है ref
। यह वास्तव में डेवलपर्स के लिए बोझिल और भ्रमित करने वाला होगा।
T
कंट्राविरेंट, औरV
सहसंयोजक के रूप में चिह्नित करना संभव है । हालांकि, एक पैरामीटर के बाद से (output
प्रकार के)U
पारित कर दिया है संदर्भ द्वारा ,U
सह या contravariant नहीं चिह्नित किया जा सकता है और "अपरिवर्तनीय" रहना चाहिए। इसलिए विचार करेंpublic delegate V MyDelegate<in T, U, out V>(T input, out U output);
कि क्या आप C # 4 या बाद का उपयोग करते हैं।