zoukankan      html  css  js  c++  java
  • 浅析C#代理

    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");


  • 相关阅读:
    求助
    第五次作业
    第四次作业
    第三次作业
    第二次作业(四则运算)
    关于软件工程相关疑问
    小组成员名单()
    第四次作业
    第二次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/sunnyblogs/p/3413622.html
Copyright © 2011-2022 走看看