所有Func委托都返回一个值。哪些.NET委托可以用于返回void的方法?
试试System.Func<T>和System.Action
System.Func<T>
System.Action
... 不接受参数,并有一个无效返回类型?
我相信Action是一个解决方案。
Action
所有Func委托至少接受一个参数
这不是真的。它们都至少有一个类型参数,但该参数决定返回类型。
因此Func<T>不接受参数并返回一个值。如果不想返回值,请使用Action或Action<T>。
Func<T>
Action<T>
所有Func委托都会返回一些东西;所有Action代表返回为空。
Func<TResult>不带参数,返回结果:
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中定义)都是新的。
Func<TArg1, TResult>
Action<TArg1, TArg2>
偶尔你会想要编写一个事件处理的委托,在这种情况下,你可以利用System.EvenHandler<T>,它隐式地接受object类型的参数,以及应该派生自EventArgs的第二个参数。EventHandlers将返回void
System.EvenHandler<T>
object
EventArgs
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编写,你也可以使用:
System.Windows.Forms
public delegate void MethodInvoker()