博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#系统委托之Action And Func
阅读量:4589 次
发布时间:2019-06-09

本文共 2508 字,大约阅读时间需要 8 分钟。

转自

Action:封装一个方法,该方法不具有参数并且不返回值

public delegate void Action()Action
:Action的泛型实现了1到16个传入参数的定义,但是仍然没有返回值,得出结论Action不支持返回值,如果需要返回值请使用另一个系统委托Funcpublic delegate void Action
(T obj)...public delegate void Action
(T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10,T11 arg11,T12 arg12,T13 arg13,T14 arg14,T15 arg15,T16 arg16)

由此可见Action的定义非常简单,但是这样的委托实在是太常用了,如果用一次自己定义一个也是可以的,多的话就感觉重复劳动太多:

过去自定义委托:

using System;using System.Windows.Forms;public delegate void ShowValue();public class Name{   private string instanceName;   public Name(string name)   {      this.instanceName = name;   }   public void DisplayToConsole()   {      Console.WriteLine(this.instanceName);   }   public void DisplayToWindow()   {      MessageBox.Show(this.instanceName);   }}public class testTestDelegate{   public static void Main()   {      Name testName = new Name("Koani");      ShowValue showMethod = testName.DisplayToWindow;      showMethod();   }}

 

现在直接使用Action:

using System;using System.Windows.Forms;public class Name{   private string instanceName;   public Name(string name)   {      this.instanceName = name;   }   public void DisplayToConsole()   {      Console.WriteLine(this.instanceName);   }   public void DisplayToWindow()   {      MessageBox.Show(this.instanceName);   }}public class testTestDelegate{   public static void Main()   {      Name testName = new Name("Koani");      Action showMethod = testName.DisplayToWindow;      //将 Action 委托与匿名方法一起使用     // Action showMethod = delegate() { testName.DisplayToWindow();} ;      //将 lambda 表达式分配给 Action 委托实例      //Action showMethod = () => testName.DisplayToWindow();      showMethod();   }}

  Action<T>的使用也是类似的,但是 Action<T>的定义是比较特别的,它有一个关键词In,,按照MSDN的解释:


关于派生程度更小或更低的类型等相关的概念理解我推荐

Func:封装一个不具有参数但却返回 TResult 参数指定的类型值的方法

public delegate TResult Func
()Func
: Func的泛型同样的实现了1到16个传入参数,而且支持返回值。public delegate TResult Func
( T arg)...public delegate void Func
( T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16)

Func的定义同样简单明了,和Action一样是为了简化代码方便”客户“使用:

过去自定义委托:

View Code

现在直接使用Func:

View Code

通过定义可以看到Func的定义不仅可以看到In关键词的身影,还有一个,MSDN的解释如下(Out作为方法的输出参数也是经常用到的):


关于派生程度更大或更高的类型等相关的概念理解我依然推荐

转载于:https://www.cnblogs.com/olderlong/p/4138438.html

你可能感兴趣的文章
HDU 2157 How many ways??
查看>>
Floyd最短路径
查看>>
方法重载和重写的区别
查看>>
块状元素和内联元素
查看>>
nav元素
查看>>
内存对齐
查看>>
HTML及资源是如何load的
查看>>
虚拟机apache启动
查看>>
【Linux】Centos下安装ffmpeg
查看>>
VSCode使用随笔
查看>>
MySQL 常用命令
查看>>
nginx FastCGI配置 No input file specified
查看>>
iOS - 拓展
查看>>
Windows命令远程执行工具Winexe
查看>>
XamarinAndroid组件教程RecylerView动画组件使用动画(3)
查看>>
linux vim 配置 go 开发环境
查看>>
week 6 CORS
查看>>
Openstack Neutron:二层技术和实现
查看>>
组合设计模式
查看>>
第十五部分_Struts2.1拦截器深度剖析、异常处理
查看>>