委托是.NET中强大的功能,而.NET为我们提供了2个非常实用的泛型委托,分别是Action、Func

【Action】

Action是.NET内部提供的一个无返回值、泛型的委托,有16重载,分别是0个参数~15个参数;

它们的定义如下:

delegate void Action();
delegate void Action<in T>(T obj);
delegate void Action<in T,in T1>(T obj,T1 obj1);
delegate void Action<in T,in T1,in T2>(T obj,T1 obj1,T2 obj2);
……

可以看到这个委托的方法签名都是无返回值、参数由0~15个,因此可用它来匹配几乎任何无返回值的方法。

例如绑定Button的Click事件:

this.button1.Click += new Action<object, EventArgs>((sender, e) => {
MessageBox.Show("hellow");
});

事件的方法签名为:void (object EventArgs) 因此以上方法完全没问题。然后里面用了一个lambda表达式传递方法体。

再如,使用线程:

 Thread t = new Thread(new ThreadStart(new Action(() => {
//线程代码
})));
t.Start();

线程ThreadStart需要的方法签名为:void(),因此以上方也完全没问题。

再例如我们要在自己的类中定义事件:

public event Action<object, EventArgs> Complete;

这样就定义一个标准的事件Complete。使用时跟.net中其它控件事件一样:

可以看到完全一样,只是生成的事件方法里面的参数名字不同,这个可以手动修改的。

【Func】

Func其实跟Action很像,只是它是带有返回值的委托。也是有15个重载:

delegate TR Func(out TR);
delegate TR Func<in T,out TR>(T obj);
delegate TR Func<in T,in T1,out TR>(T obj,T1 obj1);
delegate TR Func<in T,in T1,in T2,out TR>(T obj,T1 obj1,T2 obj2);
……

可以看到,每个重载的最后一个泛型参数均为返回值类型,可以用它来匹配任何有返回值的方法。

例如获取百度首页的HTML内容然后MessageBox.Show出来:

MessageBox.Show(new Func<string>(() => {
System.Net.WebClient wc = new System.Net.WebClient();
return wc.DownloadString("http://www.baidu.com");
})());

一句话就搞定了,是不是很霸气。

以上代码实例化了一个返回值为string无参数的委托,然后用lambda写方法体再最后加了一个()进行调用,如果是有参数的需要在这里传递参数。

怎么样,.net提供的这两个委托还是很有用的吧,在很多情况下节省了我们自定义委托的时间。如果你对委托不了解,建议你先学学委托~~~

C# .NET中自带的委托Actoin、Func详解的更多相关文章

  1. 【转载】C# 中的委托和事件(详解:简单易懂的讲解)

    本文转载自http://www.cnblogs.com/SkySoot/archive/2012/04/05/2433639.html C# 中的委托和事件(详解) C# 中的委托和事件 委托和事件在 ...

  2. Scala 深入浅出实战经典 第62讲:Scala中上下文界定内幕中的隐式参数实战详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  3. 教程-Delphi中Spcomm使用属性及用法详解

    Delphi中Spcomm使用属性及用法详解 Delphi是一种具有 功能强大.简便易用和代码执行速度快等优点的可视化快速应用开发工具,它在构架企业信息系统方面发挥着越来越重要的作用,许多程序员愿意选 ...

  4. 【转】angularjs指令中的compile与link函数详解

    这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下   通常大家在 ...

  5. angularjs指令中的compile与link函数详解

    这篇文章主要介绍了angularjs指令中的compile与link函数详解,本文同时诉大家complie,pre-link,post-link的用法与区别等内容,需要的朋友可以参考下   通常大家在 ...

  6. 使用openURL实现程序间带参数跳转详解

    使用openURL实现程序间带参数跳转详解 实现的效果:有两款应用A与B,A打开B A --> B 1. 新建工程B,bundle ID为com.YouXianMing.B 建立一个URL 这么 ...

  7. Android 中各种权限深入体验及详解

    Android 中各种权限深入体验及详解 分类: Android2012-07-15 19:27 2822人阅读 评论(0) 收藏 举报 androidpermissionsinstallersyst ...

  8. Python中的__name__和__main__含义详解

    1背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main():     ......   if __name == "__m ...

  9. webRTC中语音降噪模块ANS细节详解(二)

    上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理.本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节. ANS的基本处 ...

随机推荐

  1. GPU,CUDA,cuDNN的理解

    最近用到这方面的知识,感觉这篇文章写的很好,为了方便自己查阅,就搬运了过来,如果牵涉到侵权,请联系我,我会删除该博文!!! 我们知道做深度学习离不开GPU,不过一直以来对GPU和CPU的差别,CUDA ...

  2. android: 获取屏幕高度和虚拟导航栏高度的几种方法

    package com.yongdaimi.android.androidapitest; import android.app.Activity; import android.content.Co ...

  3. [TJOI2015]线性代数(网络流)

    [TJOI2015]线性代数(最大权闭合子图,网络流) 为了提高智商,ZJY开始学习线性代数.她的小伙伴菠萝给她出了这样一个问题:给定一个n*n的矩阵B和一个1×n的矩阵C.求出一个1×n的01矩阵A ...

  4. 青橙 A1255. 拉拉队排练(陶文博)

    A1255. 拉拉队排练(陶文博) 时间限制:1.0s   内存限制:512.0MB   总提交次数:   AC次数:   平均分:   将本题分享到:        查看未格式化的试题   提交   ...

  5. LVS+OSPF 架构(转)

    http://blog.51cto.com/pmghong/1399385 LVS 和 LVS+keepalived 这两种架构在平时听得多了,最近才接触到另外一个架构LVS+OSPF.这个架构实际上 ...

  6. 贪心+DP【洛谷P4823】 [TJOI2013]拯救小矮人

    P4823 [TJOI2013]拯救小矮人 题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以 ...

  7. 树状数组 P3605 [USACO17JAN]Promotion Counting晋升者计数

    P3605 [USACO17JAN]Promotion Counting晋升者计数 题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训--牛是可怕的管理者! 为了方便,把奶牛从 ...

  8. Python学习之路--1.0 Python概述及基本数据类型

    Python是一门解释性语言,弱类型语言 python程序的两种编写方式: 1.进入cmd控制台,输入python进入编辑模式,即可直接编写python程序 2.在.朋友文件中编写python代码,通 ...

  9. crm web ui

    1:View中的field对应于model中的attribute. 2:custom controller具有更长的生存时间,能够在view中共享一些数据. 3:window是component的一个 ...

  10. Visible Ops

    Link:http://www.wikisummaries.org/Visible_Ops Contents [hide]  1 What is ITIL? 2 Introduction 3 Phas ...