zoukankan      html  css  js  c++  java
  • C#锐利体验2读书笔记

    匿名方法,迭代,匿名方法允许我们以一种“内联”的方法来编写方法代码;匿名方法是直接与委托实例化相关联的,使委托实例化更加直观方便。匿名方法的几个相关问题--参数列表,--返回值,--外部变量。

    addButton.Click+=delegate(object sender,EventArgs e){

      MessageBox.show(((Button)sender).Text);

    }

    匿名方法可以在delegate关键字后跟一个参数列表(可以不指定),后边的代码块则可以访问这些参数。如上述代码:如果后边要声明参数,则必须与声明click这个事件所的委托类型的参数列表必须一致。如果不一样就会报错。

    注意:不指定参数列表和参数列表为空的区别,

    正确:addButton.Click+=delegate{

      MessageBox.show(((Button)sender).Text);

    }

    错误:

    addButton.Click+=delegate(){

      MessageBox.show(((Button)sender).Text);

    }

    1,匿名的方法的返回值:如果委托类型的返回值为void,匿名方法里边不能返回任何值;2:如果委托类型的返回值不为Void,匿名方法的返回值必须和委托类型的返回值兼容:delegate void MyDelegate (); //声明委托类型(没有参数,没有返回值。) MyDelegate mydele=delegate{}; //匿名参数实例化委托,MyDelegate 为类型,mydele为变量。delegate(),匿名方法实例化委托。匿名放方法就是把方法的签名去掉。

    匿名方法的机制1:静态方法中的匿名方法,2:实例方法中的匿名方法,3:匿名方法中的外部变量。

    public class aa{

    public delegate void D();

    public static void F(){

    D d=delegate{

    console.writeLine('ok')

    }

    }

    }

    上面灰色的代码编译器转换为

    public static void F(){

    D d=new D(__Method_1)

    }

    public static void  __Method_1(){

    console.writeLine('ok');

    }

    2实例方法

    public class aa{

    public int x;

    public delegate void D();

    public  void F(){

    D d=delegate{

    console.writeLine(this.x)

    }

    }

    }

    编译

    public  void F(){

    D d=new D(__Method_1)

    }

    public  void  __Method_1(){

    console.writeLine(this.x);

    }

     3匿名方法的外部变量

    void F(){

    int x=123;

    D d=delegate{Console.writeLine(x);}

    }

    上面的代码被编译成

    class __Temp

    {

      public int y;

      public void __Method1(){

      consoloe.writeLine(y)

    }

    }

    void F(){

    __Temp t =new __Temp();

    t.y=123;

    D d=new D(t.__Method1);

    }

    有时候不是我们失去了目标,而是失去了方向。
  • 相关阅读:
    java 线程状态和转化
    初学Spring
    unittest --- 单元测试
    Python单例模式的两种实现方式
    python records操作数据库
    数据可视化之——matplotlib基础学习
    python使用list维护成一个队列
    Python将list列表维护成一个栈
    Python使用rsa模块实现非对称加密与解密
    python +OpenCV实现rtmp视频流媒体的播放
  • 原文地址:https://www.cnblogs.com/871735097-/p/3817433.html
Copyright © 2011-2022 走看看