所有Func委托都返回一个值。哪些.NET委托可以用于返回void的方法?
所有Func委托至少接受一个参数
这不是真的。它们都至少有一个类型参数,但该参数决定返回类型。
所以Func<T>不接受参数并返回一个值。当您不想返回值时,使用Action或Action<T>。
所有Func委托都会返回一些东西;所有Action代表返回为空。
Func< result >不带参数,返回result:
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中定义)的新特性。
偶尔你会想写一个事件处理的委托,在这种情况下,你可以利用系统。EvenHandler<T>,它隐式接受一个object类型的参数,以及应该从EventArgs派生的第二个参数。EventHandlers将返回void
我个人认为,在测试过程中,这对于在函数体中创建一次性回调非常有用。
调用返回值和非返回值子例程的一种非常简单的方法。分别使用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()
推荐文章
- 实体框架核心:在上一个操作完成之前,在此上下文中开始的第二个操作
- 如何为构造函数定制Visual Studio的私有字段生成快捷方式?
- 为什么Visual Studio 2015/2017/2019测试运行器没有发现我的xUnit v2测试
- 如何使用JSON确保字符串是有效的JSON。网
- AppSettings从.config文件中获取值
- 通过HttpClient向REST API发布一个空体
- 如何检查IEnumerable是否为空或空?
- 自动化invokerrequired代码模式
- 没有ListBox。SelectionMode="None",是否有其他方法禁用列表框中的选择?
- 在c#代码中设置WPF文本框的背景颜色
- 在c#中,什么是单子?
- c#和Java中的泛型有什么不同?和模板在c++ ?
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何在iis7应用程序池中设置。net Framework 4.5版本