delegate 是委托声明的基础,是.net 的委托的声明的关键字
action 是基于delegate实现的代理 有多个参数(无限制个数)无返回值的代理
func 是基于delegate实现的代理 有多个参数(无限制个数)有返回值的代理
Predicate 是基于delegate实现的代理 只有一个参数 返回的是bool变量

Task工作任务项 DotNet4.0 引入的最新的使用线程池的技术

C#委托:

委托在C#的编程中用途广泛,具体的妙处可谓谁用谁知道,所以今天我不谈委托的妙处,咱们开始一点点的分享C#委托的几种实现方式

在C#委托的实现离不开 delegate 、Action 、Func 、Predicate ,那么这几种委托实现过程和区别是什么呢? 让我们一点点揭开这几种委托的什么面纱
delegate

委托实现的基础,在项目开发中我们可以根据自己的需要声明不同类型的委托
例如 : 无参数无返回值委托 public delegate void DelegateMethod(); 无参数有返回值委托 public delegate object DelegateMethod();有参数

有返回值委托public delegate object DelegateMethod(object obj);同样我们可以根据需要声明多个参数的委托public delegate object DelegateMetho

(object obj,object obj2,object3)(一般而言我们声明的C#形式参数不要多于6个,如果需要传递的参数很多怎么办呢,这个不要忘记c#中封装机制,对可以将

形参封装到一个类中,这样使用其来就方便了)

Action
首先让我们看看这家伙是何方神圣:
// 摘要:
// 封装一个方法,该方法不具有参数并且不返回值。
[TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
public delegate void Action();
哈原来也是从delegate中演化出来的,只不过是做了包装,看起来更酷了,哎我们可以发现这个Action 怎么没有参数呢,他应该只能代理那些没有参数的函数

并且没有返回值的那种 ,是不是这个Action只能代理没有返回值没有形式参数的函数吗
使用示例: Action action=new Action(方法名称)// 代理的声明;action();//代理的执行

Action<T>
// 摘要:
// 封装一个方法,该方法只有一个参数并且不返回值。
//
// 参数:
// obj:
// 此委托封装的方法的参数。
//
// 类型参数:
// T:
// 此委托封装的方法的参数类型。
public delegate void Action<in T>(T obj);

Action<T> 表示当前代理变量可以传递一个参数,T表示的是参数类型
看过之后我们感觉这个已经没那么神秘了,不就是个简单的变量声明吗 ,既然他是从delegate 中演化的不用说也是支持多参数的,只不过他的每个对应的参

数类型在Action 的后面声明,可是这家伙有点小气,就 是不给任何的调用返回数据,因此我们也就知道了这家伙所实现的代理是有局限性的,他只能代理那

些没有返回中的函数,所以他的使用范围也就确定了。、
使用示例(仅以一个参数的代理展示):Action<string> action=new Action<string>(方法名称)//代理的声明 action(参数);//代理的执行
对于一个以上的参数使用示例是一样的

Func<TResult>
// 摘要:
// 封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。
//
// 类型参数:
// TResult:
// 此委托封装的方法的返回值类型。
//
// 返回结果:
// 此委托封装的方法的返回值。
public delegate TResult Func<out TResult>();

Func<T,TResult>>
// 摘要:
// 封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
//
// 参数:
// arg:
// 此委托封装的方法的参数。
//
// 类型参数:
// T:
// 此委托封装的方法的参数类型。
//
// TResult:
// 此委托封装的方法的返回值类型。
//
// 返回结果:
// 此委托封装的方法的返回值。
[TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
public delegate TResult Func<in T, out TResult>(T arg);
看到以上说明我们就应该知道Func 代理是要返回值的代理,参数个数可以根据需要制定,但最有一个参数TResult为返回值类型参数

示例: Func<string, string> func = new Func<string, string>(Method);
func("this is a test");
public static string Method(string name)
{
return name;
}

Predicate<in T>
// 摘要:
// 表示定义一组条件并确定指定对象是否符合这些条件的方法。
//
// 参数:
// obj:
// 要按照由此委托表示的方法中定义的条件进行比较的对象。
//
// 类型参数:
// T:
// 要比较的对象的类型。
//
// 返回结果:
// 如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false。

public delegate bool Predicate<in T>(T obj);
从代理的声明中可知 该代理只有一个参数,并返回bool型值
使用示例:
public bool Method(string name)
{
return (name is string);
}

Predicate<string> predicate=new Predicate<string>(Method);
predicate("this is a test");

浅析C#代理的更多相关文章

  1. c# 线程浅析(代理 、Invoke、Lock)

    前言:本来想根据自己的经验总结一下c#线程相关的知识点, 写之前看了一些其他人的博客,发现自己也就掌握了不到三分之一....希望通过这次的博客将自己的知识点补充一下,写出更直白的博客和初学者分享. 这 ...

  2. 浅析HTTP代理原理--转

    代理服务器是HTTP协议中一个重要的组件,发挥着重要的作用. 关于HTTP代理的文章有很多,本文不再赘述,如果不清楚的可以看一下 HTTP代理的基础知识. 本文主要介绍代理的事例,分析一个真实的案例来 ...

  3. 浅析HTTP代理原理

    代理服务器是HTTP协议中一个重要的组件,发挥着重要的作用. 关于HTTP代理的文章有很多,本文不再赘述,如果不清楚的可以看一下 HTTP代理的基础知识. 本文主要介绍代理的事例,分析一个真实的案例来 ...

  4. MyBatis浅尝笔记

    MyBatis应属于一种轻量级的java持久层技术,它通过简单的SQL xml或注解,将数据库数据映射到接口与POJO.最近项目要用到mybatis,所以学习之后在这里做个总结,文中的示例以xml配置 ...

  5. Linux代理服务器使用

    1. 介绍 代理(即网络代理)是一种特殊的网络服务, 允许一个网络终端(客户端)通过这个服务与另一个终端(服务器)进行非直接连接,从而提供服务. 其中, 提供代理的网络终端称为代理服务器(Proxy ...

  6. Cglib动态代理浅析

    原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2018-06-29/18.html 作者:夜月归途 出处:http://www.guitu ...

  7. JDK动态代理浅析

    原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2018-06-29/17.html 作者:夜月归途 出处:http://www.guitu ...

  8. 浅析PAC,修改PAC文件及user-rule文件实现自动代理

    浅析PAC,修改PAC文件及user-rule文件实现自动代理 代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来 ...

  9. 浅析DispatchProxy动态代理AOP

    浅析DispatchProxy动态代理AOP(代码源码) 最近学习了一段时间Java,了解到Java实现动态代理AOP主要分为两种方式JDK.CGLIB,我之前使用NET实现AOP切面编程,会用Fil ...

随机推荐

  1. 更新edmx文件 无法生成模型:“System.Data.StrongTypingException: 表“TableDetails”中列“IsPrimaryKey”的值为 DBNull

    使用EF DBFirst 更新模型的时候,提示的错误,这是VS的EF 引用MYSQL产生的错误,如下图: 解决方案: 1.win+R 打开运行窗口,输入services.msc 回车,然后找到MySQ ...

  2. Linux 网络编程——TCP

    环境:Linux  C   一.协议介绍      TCP是面向连接的协议,提供可靠的数据传输:TCP协议的可靠传输基于三次握手.四次挥手以及确认重传机制实现.下面来具体展示下TCP的三次握手.四次挥 ...

  3. Clustered filesystem with membership version support

    A computer system with read/write access to storage devices creates a snapshot of a data volume at a ...

  4. Linux下Qt5.6 Fcitx无法输入中文输入解决办法

    Qt5.6的解决办法和之前的版本有点不同,方法如下:首先安装 fcitx-frontend-qt5.然后执行: 123 sudo cp /usr/lib/x86_64-linux-gnu/qt5/pl ...

  5. Android Handler、Message完全解析,带你从源码的角度彻底理解

    之前也是由于周末通宵看TI3比赛,一直没找到时间写博客,导致已经有好久没更新了.惭愧!后面还会恢复进度,尽量保证每周都写吧.这里也是先恭喜一下来自瑞典的Alliance战队夺得了TI3的冠军,希望明年 ...

  6. numpy 辨异(二) —— np.identity()/np.eye()

    import numpy as np; 两者在创建单位矩阵上,并无区别,两者的区别主要在接口上: np.identity(n, dtype=None):只能获取方阵,也即标准意义的单位阵: np.ey ...

  7. Android中使用ListView实现自适应表格

    GridView比ListView更容易实现自适应的表格,但是GridView每个格单元的大小固定,而ListView实现的表格可以自定义每个格单元的大小,但因此实现自适应表格也会复杂些(格单元大小不 ...

  8. Android新闻案例clientserver达到,完全自己的新闻节目平台

    一.建设新闻资料库 例如,下面的脚本代码:(正在使用mysql5.0 数据库) SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_z ...

  9. 特征价格(Hedonic price)

    特征价格法,又称 Hedonic 模型法和效用估价法,认为房地产由众多不同的特征组成,而房地产价格是由所有特征带给人们的效用决定的.由于各特征的数量及组合方式不同,使得房地产的价格产生差异.因此,如能 ...

  10. WPF中桌面屏保的制作(主要代码)

    原文:WPF中桌面屏保的制作(主要代码) 制作要点:(1) 使用System.Windows.Threading.DispatcherTimer;(2) 将Window属性设置为:      this ...