Action<T>和Func<T>委托

泛型Action<T>委托和Func<T>委托是系统定义的两个泛型委托。

Action<T>委托表示引用一个返回类型为Void的方法。这个委托存在不同的变体,可以传递之多16个不同的参数类型。同时,没有泛型参数的Action类可以调用没有参数的方法。例如,Action<in T>表示有一个输入参数的方法,Action<in T1,in T2>表示有两个输入参数的方法。

Func<T>可以以类似的方法使用。不过Func<T>允许调用带返回参数的方法。Func<T>也有不同的变体,之多可以传递16个参数和一个返回类型。例如:Func<out TResult>委托类型可以无参的带返回类型的方法,Func<in T1,inT2,out Tresult>表示带两个参数和一个返回类型的方法。

需要记住一个东西,Action<T>中的T可以有多个,但这些T类型都表示不同的输入类型。Func<T>可以表示带输出的方法,T可以有多个,且只有最后一个表示输出即最后一个是返回类型。Func<in T1,inT2,out Tresult>中的字符in、out在实际代码中是不会出现的。在VS中,可以通过IntelliSense查看:

Func<T>16参加一个返回的封装

比较一下,其实泛型委托和自定义的委托在使用上没什么不同。只不过泛型委托Func<T>系统已经为我们定义好了,直接使用就可以了,不需要再进行这样的定义delegate double DoubleOp(double x);。另一个泛型委托Action <T>的使用也是一样的,只不过不能有返回类型而已。

贴出完整的代码:

一个简单的类MyClass类:

publicclass MyClass{

delegatedouble DoubleOp(double x);

publicdouble MultiplyByTwo(double x) { return x * 2; }

publicdouble Square(double x) { return x * x; }

publicvoid myDelegate() { DoubleOp[] MyDoubleOp = { this.MultiplyByTwo, this.Square };

for (int i = 0; i < MyDoubleOp.Length; i++)

{

Console.WriteLine(MyDoubleOp[i](1.414));

}

Func<double, double>[] myFunc = { this.MultiplyByTwo, this.Square };

for (int i = 0; i < myFunc.Length; i++)

{

Console.WriteLine(myFunc[i](2.236));

}

}

}

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

  1. Action<T> 和 Func<T> 委托

    概述: 除了为每个参数和返回类型定义一个新委托类型之外,可以使用Action<T> 和 Func<T> 委托. Action<T> Action<T>委 ...

  2. Action<T>和Func<T>委托事例

    Action<T>和Func<T>委托事例 using System; //除了为每个参数和返回类型定义一个新委托类型之外,还可以使用Action<T>和Func& ...

  3. C#委托Action、Action<T>、Func<T>、Predicate<T>

    CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...

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

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

  5. 使用.NET中的Action及Func泛型委托

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

  6. 第十节:委托和事件(2)(泛型委托、Func和Action、事件及与委托的比较)

    一. 泛型委托 所谓的泛型委托,即自定义委托的参数可以用泛型约束,同时内置委托Func和Action本身就是泛型委托. 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下. p ...

  7. C# 笔记 Func<TResult> 委托、Action<T> 委托

    https://blog.csdn.net/wanglui1990/article/details/79303894 Func<ΤResult> 委托:代理(delegate)一个返回类型 ...

  8. [转]C#委托Action、Action<T>、Func<T>、Predicate<T>

    CLR环境中给我们内置了几个常用委托Action. Action<T>.Func<T>.Predicate<T>,一般我们要用到委托的时候,尽量不要自己再定义一 个 ...

  9. c# Action,Func,Predicate委托

    System命名空间下已经预先定义好了三中泛型委托,Action,Func和Predicate,这样我们在编程的时候,就不必要自己去定义这些委托了 Action是没有返回值的 Func是带返回值的 不 ...

随机推荐

  1. custom usb-seriel udev relus for compatible usb-seriel devices using kermit

    custom usb-seriel udev relus for compatible usb-seriel devices add-pl2303.rules: ACTION== "add& ...

  2. C++模板详解——使用篇

    假如我们需要取得两个变量中较大的变量,或许,我们可以通过重载的方式实现,如下. int max(int fir,int sec); float max(float fir,float sec); do ...

  3. Java——File类成员方法

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  4. java修饰符的作用范围

    访问修饰符: private 缺省 protected public 作用范围: private 被private修饰的属性和方法,不能被其他类访问,子类不能继承也不能访问.只能在所在类内部访问.缺省 ...

  5. Swift网络封装库Moya中文手册之Authentication

    Authentication 安全验证可能有点复杂,一些网络请求需要认证,这里我们讨论两种常见的. Basic HTTP Auth HTTP auth是HTTP协议自带的用户名/密码验证.如果你使用的 ...

  6. Chrome 应用推荐 - Shortcuts for Google™ 3.4.1

    Choose from 200+ Google™ services to show up as buttons in a space-saving popup. Official Firefox ex ...

  7. 借鉴seisman安装软件时的文件放置选择

    对于大型的软件包的安装来说: 当下载成功一个软件的压缩包后: tar -xvf xxxx.tgz ./configure --prefix=/opt/xxxx make sudo make insta ...

  8. vue-cli 添加到生产环境问题总结

    1. 路径问题  部署到生产环境后的实际链接为:   服务器项目路径 + serviceUrl的路径  创建 GlobalConstant.js  分别配置 开发环境和生产环境的 路径  (注:此处生 ...

  9. c++野(wild)指针与悬空(dangling)指针

    re 1.https://www.cnblogs.com/idorax/p/6475941.html end

  10. MySQL设置默认编码

    查看默认编码:show variables like "char%" MySQL5.5以下版本: 1.打开配置文件 2.在[client]和[mysqld]字段下面均添加defau ...