其实他们两个都是委托【代理】的简写形式。

一、【action<>】指定那些只有输入参数,没有返回值的委托

Delegate的代码:

[csharp] 

public delegate void myDelegate(string str); 

public static void HellowChinese(string strChinese) 

    Console.WriteLine("Good morning," + strChinese); 

    Console.ReadLine(); 

myDelegate d = new myDelegate(HellowChinese); 

d("Mr wang"); 

用了Action之后呢:

[csharp] 

public static void HellowChinese(string strChinese) 

    Console.WriteLine("Good morning," + strChinese); 

    Console.ReadLine(); 

Action<string> action = HellowChinese; 

action("Spring."); 

就是相当于省去了定义委托的步骤了。

二、func<> 这个和上面的那个是一样的,区别是这个有返回值!

[csharp]  www.2cto.com

public static string HelloEnglish(string strEnglish) 

    return "Hello." + strEnglish; 

Func<string, string> f = HelloEnglish; 

Console.WriteLine(f("Srping ji")); 

Console.ReadLine(); 

 

 

unc,Action 的介绍及其用法

Func是一种委托,这是在3.5里面新增的,2.0里面我们使用委托是用Delegate,Func位于System.Core命名空间下,使用委托可以提升效率,例如在反射中使用就可以弥补反射所损失的性能。
Action<T>和Func<T,TResult>的功能是一样的,只是Action<T>没有返类型,

Func<T,T,Result>:有参数,有返回类型

Action,则既没有返回也没有参数,

Func<T,TResult> 的表现形式分为以下几种:

1。Func<T,TResult>

2。Func<T,T1,TResult>

3。Func<T,T1,T2,TResult>

4。Func<T,T1,T2,T3,TResult>

5。Func<T,T1,T2,T3,T4,TResult>

分别说一下各个参数的意义,TResult表示 委托所返回值 所代表的类型, T,T1,T2,T3,T4表示委托所调用的方法的参数类型,

以下是使用示例:

Func<int, bool> myFunc = null;//全部变量

myFunc = x => CheckIsInt32(x); //给委托封装方法的地方 使用了Lambda表达式

private bool CheckIsInt32(int pars)//被封装的方法
        {
            return pars == 5;
        }

  bool ok = myFunc(5);//调用委托

MSDN:http://msdn.microsoft.com/zh-cn/library/bb534303(VS.95).aspx

但是如果我们需要所封装的方法不返回值,增么办呢?就使用Action!

可以使用 Action<T1, T2, T3, T4>委托以参数形式传递方法,而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说,封装的方法必须具有四个均通过值传递给它的参数,并且不能返回值。(在 C# 中,该方法必须返回 void。在 Visual Basic 中,必须通过 SubEnd Sub 结构来定义它。)通常,这种方法用于执行某个操作。

使用方法和Func类似!

MSDN:http://msdn.microsoft.com/zh-cn/library/bb548654(VS.95).aspx

Action:既没有返回,也没有参数,使用方式如下:

Action action = null;//定义action

action =  CheckIsVoid;//封装方法,只需要方法的名字

action();//调用

总结:使用Func<T,TResult>和Action<T>,Action而不使用Delegate其实都是为了简化代码,使用更少的代码达到相同的效果,不需要我们显示的声明一个委托,Func<T,TResult>的最后一个参数始终是返回类型,而Action<T,TResult>是没有返回类型的,而Action是没有返回类型和参数输入的。

C#的委托 Action<>和Func<>的更多相关文章

  1. C#的委托(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 delegate我们常用到的一种声明 delegate至少0个参数,至多32个参 ...

  2. C#委托的介绍(delegate、Action、Func、predicate)

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1.委托的声明 (1). delegate delegate我们常用到的一种声明   Deleg ...

  3. Delegate、Predicate、Action和Func

    写在前面 Delegate Predicate Action Func 逆变和协变 先说下什么是委托(Delegate),委托在C#中是一种类型,和Class是一个级别,但是我们经常把它看做是一个方法 ...

  4. VS2012 Unit Test(Void, Action, Func) —— 对无返回值、使用Action或Func作为参数、多重载的方法进行单元测试

    [提示] 1. 阅读文本前希望您具备如下知识:了解单元测试,了解Dynamic,熟悉泛型(协变与逆变)和Lambda,熟悉.NET Framework提供的 Action与Func委托.2.如果您对单 ...

  5. C#委托的介绍(delegate、Action、Func、predicate) --转载

    来源:http://www.cnblogs.com/akwwl/p/3232679.html 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递.事件是一种特殊的委托. 1 ...

  6. C#系统委托之Action And Func

    Action Action<T> Func Func<T> Action:封装一个方法,该方法不具有参数并且不返回值 public delegate void Action() ...

  7. C#委托(Action、Func、predicate)

    Predicate 泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法.此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素. public delegate boo ...

  8. Action<>和Func<> 委托【代理】

    C#中的Action<>和Func<> 其实他们两个都是委托[代理]的简写形式. 一.[action<>]指定那些只有输入参数,没有返回值的委托 Delegate的 ...

  9. .NET中的Action及Func泛型委托

    委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调机制的实现基 ...

随机推荐

  1. 2016-1-5第一个完整APP 私人通讯录的实现 1:登录界面及跳转的简单实现2

    ---恢复内容开始--- 实际效果如上 一:Segue的学习 1.什么是Segue: Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象(简称Segue)   ...

  2. UE正则表达式查找和替换(将【,;】)替换为换行

  3. webservice发布在外网上的在system.web中加入这个就好使了

    <webServices>         <protocols>            <add name="HttpSoap"/>      ...

  4. HDOJ-三部曲一(搜索、数学)-1006- Catch That Cow

    Catch That Cow Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tot ...

  5. ACDream-C - Transformers' Mission(Dijastra最短路径)

    dijstra求最短路径:经典应用题目: 题意:给你一个带权值无向图,权值是A点到B点的时间,然后告诉你起点,一个人可以去炸掉一个结点或多个节点,也可以派多个人,最终这些人在终点集合,问最后一个到达终 ...

  6. 关于我和Github不得不说的一些小事

    你好,我叫黄雅婷,学号是1413042031,网络工程142班.因为小时候家里有很多课外书,有关神话和科学方面的杂志和书籍等,所以从小就喜欢看书,现在比较不挑,什么书都喜欢看,就是给我本字典,我也能看 ...

  7. Median Weight Bead_floyd

    Description There are N beads which of the same shape and size, but with different weights. N is an ...

  8. 8、C#基础整理(数组和冒泡排序)

    数组 概念:定义一组同类型的指定个数的变量,索引从0开始 例: ];//定义一组有10个数据的数组 shuname[] = ; Console.WriteLine(shuname[]);//打印出1 ...

  9. markdown to html

    /************************************************************************* * markdown to html * 说明: ...

  10. Exploratory Software Testing

    最近找到去年上半年看过一本关于测试方面书籍的总结笔记,一直放在我的个人U盘里,当时是用Xmind记录的,现在重新整理下分享给大家了! James A.Whittaker [美] 詹姆斯·惠特克(软件测 ...