所有Func委托都返回一个值。哪些.NET委托可以用于返回void的方法?


当前回答

偶尔你会想写一个事件处理的委托,在这种情况下,你可以利用系统。EvenHandler<T>,它隐式接受一个object类型的参数,以及应该从EventArgs派生的第二个参数。EventHandlers将返回void

我个人认为,在测试过程中,这对于在函数体中创建一次性回调非常有用。

其他回答

偶尔你会想写一个事件处理的委托,在这种情况下,你可以利用系统。EvenHandler<T>,它隐式接受一个object类型的参数,以及应该从EventArgs派生的第二个参数。EventHandlers将返回void

我个人认为,在测试过程中,这对于在函数体中创建一次性回调非常有用。

所有Func委托至少接受一个参数

这不是真的。它们都至少有一个类型参数,但该参数决定返回类型。

所以Func<T>不接受参数并返回一个值。当您不想返回值时,使用Action或Action<T>。

调用返回值和非返回值子例程的一种非常简单的方法。分别使用Func和Action。(参见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());
    }  
}

... 不接受参数,并有一个无效返回类型?

我相信行动可以解决这个问题。

... 不接受参数,并有一个无效返回类型?

如果你正在为System.Windows编写程序。表单,你也可以使用:

public delegate void MethodInvoker()