Func委托,没有返回类型

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

267160 次浏览

试试System.Func<T>System.Action

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

我相信Action是一个解决方案。

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

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

因此Func<T>不接受参数并返回一个值。如果不想返回值,请使用ActionAction<T>

所有Func委托都会返回一些东西;所有Action代表返回为空。

Func<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中定义)都是新的。

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

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

调用返回值和非返回值子例程的一种非常简单的方法。分别使用函数行动。# EYZ2

试试这个例子

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.Forms编写,你也可以使用:

public delegate void MethodInvoker()