当前位置: 首页 > news >正文

C# 匿名函数 delegate(参数...){ }

什么是匿名函数


      顾名思义,就是没有名字的函数
            匿名函数的使用主要是配合委托和事件进行使用
                    脱离委托和事件 是不会使用匿名函数的

基本语法
            delegate (参数列表)
            {
               函数逻辑
            };


何时使用?
            1.函数中传递委托参数时
            2.委托或事件赋值时

使用

 static void Main(string[] args)
 {
    //1.无参无返回
    //这样申明匿名函数 只是在申明函数而已 还没有调用
    //真正调用它的时候 是这个委托容器啥时候调用 就什么时候调用这个匿名函数
    Action a = delegate ()
    {
        Console.WriteLine("匿名函数逻辑");
    };
    
    a();
    //2.有参
    Action<int, string> b = delegate (int a, string b)
    {
        Console.WriteLine(a);
        Console.WriteLine(b);
    };

    b(100, "123");
    //3.有返回值
    Func<string> c = delegate ()
    {
        return "123123";
    };

    Console.WriteLine(c());

    //4.一般情况会作为函数参数传递 或者 作为函数返回值
    Test t = new Test();
    Action ac = delegate ()
    {
        Console.WriteLine("随参数传入的匿名函数逻辑");
    };
    t.Dosomthing(50, ac);
    //  参数传递
    t.Dosomthing(100, delegate ()
    {
        Console.WriteLine("随参数传入的匿名函数逻辑");
    });

    //  返回值
    Action ac2 = t.GetFun();
    ac2();
    //一步到位 直接调用返回的 委托函数
    t.GetFun()();
}


 class Test
 {
     public Action action;

     //作为参数传递时
     public void Dosomthing(int a, Action fun)
     {
         Console.WriteLine(a);
         fun();
     }

     //作为返回值
     public Action GetFun()
     {
         return delegate() {
             Console.WriteLine("函数内部返回的一个匿名函数逻辑");
         };
     }
}

匿名函数缺点

添加到委托或事件容器中后 不记录 无法单独移除 只能置空

            Action ac3 = delegate ()
            {
                Console.WriteLine("匿名函数一");
            };

            ac3 += delegate ()
            {
                Console.WriteLine("匿名函数二");
            };

            ac3();
         // 因为匿名函数没有名字 所以没有办法指定移除某一个匿名函数
       //   此匿名函数 非彼匿名函数 不能通过看逻辑是否一样 就证明是一个 
            //ac3 -= delegate ()
            //{
            //    Console.WriteLine("匿名函数一");
            //};
            ac3 = null;
            //ac3();

练习

写一个函数传入一个整数,返回一个函数

之后执行这个匿名函数时传入一个整数和之前那个函数传入的数相乘

返回结果

 class Program
 {
 public static void Main()
 {
    Console .WriteLine (  First(5)(3));
 }
 public static  Func<int,int> First(int a)
 {
     return delegate (int b)
     {
         return b * a;
     };
 }

 }

相关文章:

  • 编程挫折byebye:实用策略助力技术升级!
  • Vue中使用el-table自定义序号翻页后又从1开始没有连续
  • C#面:ActionResult 和 ViewResult有什么不同?
  • 速盾:前端cdn加速是什么意思?
  • 深度学习入门-05
  • Windows10企业版找不到微软商店以及微软商店打不开问题解决
  • 7-11 矩阵转置
  • Datawhale AI夏令营 第五期 CV方向 Task1笔记
  • Android12平台上支持spi屏处理
  • 设计模式六大原则(一)--单一职责原则
  • python爬虫——入门
  • Docker 安装与配置 Docker Registry 指南
  • Prometheus 服务发现
  • (十七)Flink 容错机制
  • 封装websocket
  • UE5用蓝图实现物体A始终朝向物体B |Find Look at Rotation|
  • 网络攻击原理及过程
  • 遭遇“git”命令找不到的报错,开发者如何迅速应对
  • 深入学习SQL优化的第四天
  • Android fork 进程 process(init/Zygote/SystemServer)
  • 当农民跨进流动的世界|劳动者的书信①
  • 证监会:坚决拥护党中央对王建军进行纪律审查和监察调查的决定
  • 朝鲜海军新型驱逐舰进行首次武器系统测试
  • 解放日报:这是一场需要定力和实力的“科技长征”
  • 民生银行一季度净利127.42亿降逾5%,营收增7.41%
  • 初步结果显示加拿大自由党赢得大选,外交部回应