zoukankan      html  css  js  c++  java
  • C#委托、泛型委托

    一、一个委托是一个指向一个方法的引用,或者说,一个委托的实例就是一个指向某个方法的对象,这是一个简单却十分强大的概念。 

    有参数的方法中,我们把另一个方法当作参数传进来,那么这个方法的类型就是委托类型。

    委托所指向的函数必须跟委托具有相同的签名;我们可以把一个函数赋值给委托,前提是这个函数的签名必须跟委托是一样的

    1.声明委托的关键词是delegate

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

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

     class Program
    {
           //声明一个委托指向相同签名的2个函数SayHiChinese,SayHiEnglish
            public delegate void DelSayHi(string name);
            static void Main(string[] args)
            {
                SayHi("张三",SayHiChinese);//把函数当成参数直接传进来
                Console.ReadKey();
                //另一种调用方式,这种情况可以不用写SayHi函数了
                DelSayHi del=SayHiChinese;
                Del(“张三”);
                Console.ReadKey();
                //第三种方法,可以使用匿名函数,匿名函数的签名也要跟委托一样
    
                DelSayHi del = delegate (string name){ Console.WriteLine("你好" + name); };     
                //第四种方法lamda表达式  => goes to
                DelSayHi del = (string name) => { Console.WriteLine("你好" + name); };
                del("张三");
                Console.ReadKey();
    
      }
            public static void SayHi(string name, DelSayHi del)//委托类型的参数就是函数
            {
                del(name);
            }
            public static void SayHiChinese(string name)
            {
                Console.WriteLine("你好" + name);
            }
            public static void SayHiEnglish(string name)
            {
                Console.WriteLine("Hello" + name);
            }
        }

    二、泛型委托

    (1). 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

    Func<int, int> func = (a) => { return a; };
    Console.WriteLine(func(8));

    //输出:8

    (2). 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个参数,无返回值。

    Action<string> act = (a) => Console.WriteLine("hello world"+a);
    act("北京");
    //输出:hello world 北京

     (3) .predicate

       predicate 是返回bool型的泛型委托

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

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

       例:public delegate bool Predicate<T> (T obj)

      

  • 相关阅读:
    机器学习
    octave安装使用
    学习pytorch
    安装Pytorch
    下载软件的好地方
    python 内置模块time timedate random
    关于git
    python软件目录结构规范
    python 内置参数
    test
  • 原文地址:https://www.cnblogs.com/qingheshiguang/p/14218064.html
Copyright © 2011-2022 走看看