• C#委托的用法


    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。

    1.委托的声明

     Delegate 类

        Delegate是一种引用类型,我们在处理他的时候要当作类来看待而不是方法,说白了委托就是对方法或者方法列表的引用,调用一个委托实例就好像是调用c++中的指针一    样,他封装了对制定方法的引用,或者说委托起到的是桥梁的作用,实例后的委托对象会将给定的参数传递给他所回调的方法,并去执行方法。

        Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型。

        例:public delegate int MethodtDelegate(int x, int y);表示有两个参数,并返回int型。

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

    匿名方法

    C#中几个常用的委托(Action,Func,predicate)

    Action

           Action是无返回值的泛型委托。

       Action 表示无参,无返回值的委托

       Action<int,string> 表示有传入参数int,string无返回值的委托

       Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

           Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托

       Action至少0个参数,至多16个参数,无返回值。

    public delegate void Action<in T1, in T2, in T3, in T4>(
    	T1 arg1,
    	T2 arg2,
    	T3 arg3,
    	T4 arg4
    )

    Action是对委托的使用的简化:

    public static void HellowChinese(string strChinese)  
    {  
        Console.WriteLine("Good morning," + strChinese);  
        Console.ReadLine();  
    }  
      
    Action<string> action = HellowChinese;  
    action("Spring.");  

    Func

       Func是有返回值的泛型委托

       Func<int> 表示无参,返回值为int的委托

       Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

       Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

       Func<T1,T2,,T3,int> 表示传入参数为T1,T2,,T3(泛型)返回值为int的委托

       Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

    public delegate TResult Func<in T1, in T2, in T3, out TResult>(
        T1 arg1,
        T2 arg2,
        T3 arg3
    )

    Func也是对委托的使用的简化:

    public static string HelloEnglish(string strEnglish)  
    {  
        return "Hello." + strEnglish;  
    }  
      
    Func<string, string> f = HelloEnglish;  
    Console.WriteLine(f("Srping ji"));  
    Console.ReadLine();  

    predicate

       predicate 是返回bool型的泛型委托

       predicate<int> 表示传入参数为int 返回bool的委托

       Predicate有且只有一个参数,返回值固定为bool

    public delegate bool Predicate<in T>(
        T obj
    )

    2.总结

    委托类似于 C++ 函数指针,但它们是类型安全的。
    委托允许将方法作为参数进行传递。
    委托可用于定义回调方法。
    委托可以链接在一起;例如,可以对一个事件调用多个方法。
    方法不必与委托签名完全匹配。

    Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型

    Func可以接受0个至16个传入参数,必须具有返回值

    Action可以接受0个至16个传入参数,无返回值

    Predicate只能接受一个传入参数,返回值为bool类型

    使用Func<T,TResult>和Action<T>,Action而不使用Delegate其实都是为了简化代码,使用更少的代码达到相同的效果,不需要我们显示的声明一个委托。

    Func<T,TResult>的最后一个参数始终是返回类型,而Action<T>是没有返回类型的,而Action是没有返回类型和参数输入的。

    predicate<T> 使用的比较少。

    参考 :https://msdn.microsoft.com/zh-cn/library/bb549430(v=vs.110).aspx

  • 相关阅读:
    授权中的with admin option和with grant option
    CentOS6.2(64bit)下mysql5.6.16主从同步配置
    linux zip命令
    从模版中找到控件的方法和找到样式的方法
    WPF 在事件中绑定命令(不可以在模版中绑定命令)
    WPF: ShowDialog() 切换到其他应用窗口后,再切换回来无法让子窗口总在最上方
    TreeViewItem实现整行选中 (两种用法)
    BitmapImage 读取内存流和显示图片
    IsKeyboardFocused -- 键盘焦点
    WPF中的imagesource 和内存图片的处理
  • 原文地址:https://www.cnblogs.com/TechStory/p/5445984.html
Copyright © 2020-2023  润新知