फंक प्रतिनिधियों के सभी एक मूल्य लौटाते हैं। .NET डेलिगेट्स क्या हैं जो शून्य को वापस करने वाले तरीकों के साथ उपयोग किए जा सकते हैं?
फंक प्रतिनिधियों के सभी एक मूल्य लौटाते हैं। .NET डेलिगेट्स क्या हैं जो शून्य को वापस करने वाले तरीकों के साथ उपयोग किए जा सकते हैं?
जवाबों:
सभी फंक प्रतिनिधि कुछ वापस करते हैं; सभी एक्शन प्रतिनिधि वापस शून्य हो जाते हैं।
Func<TResult>
कोई तर्क नहीं लेता है और TResult लौटाता है:
public delegate TResult Func<TResult>()
Action<T>
एक तर्क लेता है और एक मूल्य वापस नहीं करता है:
public delegate void Action<T>(T obj)
Action
सबसे सरल, 'नंगे' प्रतिनिधि हैं:
public delegate void Action()
वहाँ भी है ( Func<TArg1, TResult>
और Action<TArg1, TArg2>
(16 तर्कों तक अन्य)। ये सभी (को छोड़कर Action<T>
) .NET 3.5 (System.Core में परिभाषित) के लिए नए हैं।
Func<,,, ... ,>
.NET 4.0 में 16 मापदंडों (प्लस के मामले में एक वापसी प्रकार ) के लिए गए थे, लेकिन प्रत्येक "श्रृंखला" के अंतिम आठ प्रकारों में परिभाषित किया System.Core.dll
गया है mscorlib.dll
, इसलिए इसमें कारण नहीं होगा क्यों michielvoo उन्हें नहीं देखा था। हालाँकि, .NET संस्करण 4.5 और 4.5.1 में कोई अधिक फ़िक्सेस या क्रियाएँ नहीं जोड़ी गईं। क्या यह क्रम A170836 या A170875 हो जाएगा ? बने रहें।
... कोई तर्क नहीं लेता है और एक शून्य वापसी प्रकार है?
मेरा मानना है Action
है इसका समाधान है।
सभी फ़ंक प्रतिनिधि कम से कम एक पैरामीटर लेते हैं
यह सच नहीं है। वे सभी कम से कम एक प्रकार का तर्क लेते हैं, लेकिन यह तर्क वापसी प्रकार को निर्धारित करता है।
इसलिए Func<T>
कोई मानदंड स्वीकार नहीं करता है और एक मान लौटाता है। उपयोग Action
या Action<T>
जब आप एक मूल्य वापस नहीं करना चाहते हैं।
कोशिश करो System.Func<T>
औरSystem.Action
Converter<TInput, TOutput>
जो कि बाद की तरह था ) Func<T, TResult>
। इसका उपयोग उस List<>.ConvertAll
विधि में किया गया था जो प्रत्येक तत्व को किसी List<>
अन्य ऑब्जेक्ट पर प्रोजेक्ट करता था , और सभी "फ़ंक्शन मान" को एक नए में रखता था List<>
। (बाद में, कोई अक्सर इसके लिए लाइनक का उपयोग Select
करता था।)
कभी-कभी आप ईवेंट हैंडलिंग के लिए एक प्रतिनिधि लिखना चाहेंगे, जिस स्थिति में आप लाभ उठा सकते हैं, System.EvenHandler<T>
जो object
दूसरे पैरामीटर के अतिरिक्त प्रकार के एक तर्क को स्वीकार करता है जो इससे प्राप्त होना चाहिए EventArgs
। इवेंटहैंडलर लौट आएंगेvoid
मुझे व्यक्तिगत रूप से एक फ़ंक्शन बॉडी में एक बार कॉलबैक बनाने के लिए परीक्षण के दौरान यह उपयोगी लगा।
... कोई तर्क नहीं लेता है और एक शून्य वापसी प्रकार है?
यदि आप के लिए लिख रहे हैं System.Windows.Forms
, तो आप भी उपयोग कर सकते हैं:
public delegate void MethodInvoker()
वापसी और गैर वापसी मूल्य सबरूटीन्स को आमंत्रित करने का एक बहुत आसान तरीका है। क्रमशः फंक और एक्शन का उपयोग कर रहा है। (यह भी देखें https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx )
इस उदाहरण का प्रयास करें
using System;
public class Program
{
private Func<string,string> FunctionPTR = null;
private Func<string,string, string> FunctionPTR1 = null;
private Action<object> ProcedurePTR = null;
private string Display(string message)
{
Console.WriteLine(message);
return null;
}
private string Display(string message1,string message2)
{
Console.WriteLine(message1);
Console.WriteLine(message2);
return null;
}
public void ObjectProcess(object param)
{
if (param == null)
{
throw new ArgumentNullException("Parameter is null or missing");
}
else
{
Console.WriteLine("Object is valid");
}
}
public void Main(string[] args)
{
FunctionPTR = Display;
FunctionPTR1= Display;
ProcedurePTR = ObjectProcess;
FunctionPTR("Welcome to function pointer sample.");
FunctionPTR1("Welcome","This is function pointer sample");
ProcedurePTR(new object());
}
}