zoukankan      html  css  js  c++  java
  • 委托的记忆碎片

    1、委托


    定义:定义委托就是定义一类方法的类型,方法类型分类原则是根据参数和返回值的不同来分类的。
    什么!你说方法分类还考虑返回值的类型吗?方法的重载可不会考虑方法的返回值的不同,只看方法的参数列表的啊。
    是的,方法重载中的方法区分的方法是不看返回值的,但是定义委托是看方法返回值的。
    例如:两个int参数返回一个Boolean,这就可以用委托定义一类方法,c#的表达式:

    public delegate bool MyDelegate(int i,int j);


    这时候MyDelegate就是指有两个int参数,bool返回值的方法类型,他的实类就是一个包含两个int参数,bool返回值的方法。
    当委托作为方法的参数使用时,直接使用实例的方法名,如:

    public void BobbSort(int[] list, MyDelegate de)
    {
       //方法体
    }

    Main()
    {
         //注意methodName就是一个有两个int参数,返回值为bool的方法名
         BobbSort(list,methodName);
    }


    这里要说明一下,从以前调用方法的经验来看,这边的委托方法实例调用是有区别的,并并没有方法的参数列表。


    2、匿名方法


    定义:没有实际方法声明的委托实例。
    这句话的意思是:是一个委托实例,而委托实例是一个方法,是一个没有没有实际方法声明的方法,其实方法的定义没有一个方法名称而是直接放回给一个委托。如:

    MyDelete mydelegate;
    mydelegate = delegate(int first,int second)
    {
         return first < second;
    };


    3、C#3.0引入了Lampda表达式

    比匿名方法更加简洁的一种匿名函数语法。这里的匿名函数泛指Lambda表达式和匿名方法,其中Lambda表达式分成表达式Lambda和语句Lambda。
    语句Lambda:

    (int first,int second)=>
    {
        return first < second;
    }


    匿名方法:

    delegate(int first,int second)
    {
        return first < second;
    }


    以上的两段的代码功能一样。其实都是一个没有方法名的方法,但是可以直接赋值给这个类型的委托,成为一个委托实例。
    语句Lambda还可以省略参数的类型:

    (first,second)=>
    {
        return first < second;
    }


    这是因为你把这个表达式赋值给一个委托后,而委托的类型是:

    public delegate bool MyDelegate(int i,int j);


    这样编译器会自己判断。
    无参数的语句Lambda:

    Func<string> getUserInput =
        ()=>
        {
            string input;
            do
            {
                input = console.ReadLine();
            }while(input.Trim().Length == 0);
           return input;
        }


    圆括号规则例外,当编译器能推断数据类型,而且只有一个输入参数,语句Lambda可以不带圆括号:


    process=>{return process.ToString();}


    表达式Lambda:就是只有一个表达式,没有语句块。如:

    (f,s)=>f<s;


    就是没有return语句及大括号,其实这个表达式本身就是一个返回语句。

  • 相关阅读:
    [C语言]变长函数参数和变长参数宏
    [转载]腾讯机智团队分享--AllReduce算法的前世今生
    (三)opencv_py之阈值处理
    (二)opencv_py之彩色空间转换
    neo4j 一些常用的CQL
    Neo4j (1)创建节点
    tensorflow实现siamese网络 (附代码)
    早停!? earlystopping for keras
    关于 ESIM 网络的 资料 集合
    聊天机器人资源合集:项目,语聊,论文,教程
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2242511.html
Copyright © 2011-2022 走看看