广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何在C#9 中使用static匿名函数
  • 846
分享到

如何在C#9 中使用static匿名函数

2024-04-02 19:04:59 846人浏览 安东尼
摘要

目录匿名方法的代价C#9 中使用静态匿名方法匿名函数 在 C# 中已经出现很多年了,虽然匿名函数用起来很爽,但代价是不小的,为了避免不必要那些你意想不到的内存分配,这就是为什么 C#

匿名函数 在 C# 中已经出现很多年了,虽然匿名函数用起来很爽,但代价是不小的,为了避免不必要那些你意想不到的内存分配,这就是为什么 C#9 中引入 static 匿名函数的原因,这篇文章我们将会讨论如何使用 静态匿名函数 以及为什么要用。

匿名方法的代价

匿名方法代价不低,因为它有 委托调用 方面的开销,什么意思呢?如果你的 lambda 里需要捕获封闭方法的局部变量或者参数,那么就会存在两种堆分配,一种是委托上的分配,另一种是闭包上的分配,如果你的 lambda 仅仅捕获一个封闭方法的实例状态,那么仅会有委托分配,如果你的 lambda 什么都不捕获或者仅捕获一个静态状态,那么就没有任何分配。

如果你有点懵的话,使用下面的例子加深理解。


int y = 1;
MyMethod(x => x + y);

上面代码的 lambda 中需要获取 y,所以就有了意想不到的堆分配,要想解决,可以将 y 定义为 const 或者 static 来避免这种不必要的分配开销,修改代码如下:


const int y = 1;
MyMethod(static x => x + y);

为了避免这种不必要和浪费内存的分配,可以在 lambda 上使用 static 关键词 及 变量上标注 const,值得注意的是,static 匿名函数不能访问封闭方法的局部变量和参数和 this 指针,但可以引用它的 静态方法 和 常量。

C#9 中使用静态匿名方法

先看一下例子:


    public class Demo
    {
        private string fORMattedText = "{0} It was developed by Microsoft's Anders Hejlsberg in the year 2000.";
        void DisplayText(Func<string, string> func)
        {
            Console.WriteLine(func("C# is a popular programming language."));
        }
        public void Display()
        {
            DisplayText(text => string.Format(formattedText, text));
            Console.Read();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            new Demo().Display();
            Console.Read();
        }
    }

上面的例子中,formattedText变量会被 DisplayText 方法中的 func 所捕获,这也就意味着它会产生你意料之外的内存分配,把程序跑起来之后,会看到如下的输出。

为了避免这种内存分配,你只需要做两件事。

  • formattedText 上标记 const。
  • lambda 上标记 static。

所以修改后的代码如下:


    public class Demo
    {
        private const string formattedText = "{0} It was developed by Microsoft's Anders Hejlsberg in the year 2000.";
        void DisplayText(Func<string, string> func)
        {
            Console.WriteLine(func("C# is a popular programming language."));
        }
        public void Display()
        {
            DisplayText(static text => string.Format(formattedText, text));
            Console.Read();
        }
    }

现在就没有任何你意料之外的分配了,我想这也是你想要的。

现在你可以使用 static + const 组合来提升应用程序性能了,同时也可以有效的阻止在 lambda 中误用封闭方法中的局部变量和参数引发的不必要开销。

以上就是如何在C#9中使用static匿名函数的详细内容,更多关于C#9 中使用static匿名函数的资料请关注编程网其它相关文章!

--结束END--

本文标题: 如何在C#9 中使用static匿名函数

本文链接: https://www.lsjlt.com/news/122672.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在C#9 中使用static匿名函数
    目录匿名方法的代价C#9 中使用静态匿名方法匿名函数 在 C# 中已经出现很多年了,虽然匿名函数用起来很爽,但代价是不小的,为了避免不必要那些你意想不到的内存分配,这就是为什么 C#...
    99+
    2022-11-12
  • static匿名函数怎么在C#9 中使用
    static匿名函数怎么在C#9 中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。匿名方法的代价匿名方法代价不低,因为它有 委托调用 方面的开销,什么意思呢...
    99+
    2023-06-14
  • C#匿名函数和匿名方法如何使用
    这篇文章主要讲解了“C#匿名函数和匿名方法如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#匿名函数和匿名方法如何使用”吧!在 C# 中,可以将匿名函数简单的理解为没有名称只有函数主...
    99+
    2023-07-05
  • C#匿名函数和匿名方法的使用
    目录匿名函数的语法 C# 匿名函数使用场景在 C# 中,可以将匿名函数简单的理解为没有名称只有函数主体的函数。匿名函数提供了一种将代码块作为委托参数传递的技术,它是一个&l...
    99+
    2023-05-14
    C#匿名函数和匿名方法 C# 匿名函数
  • 如何在PHP中使用匿名函数
    在PHP语言中,匿名函数也被称作闭包(Closure),是一种可以在运行时定义、使用的函数,而无需提前进行命名。相较于普通函数,匿名函数可以直接作为一个变量使用并传递给其他函数,同时可以访问到其所处环境的变量值。匿名函数的语法格式如下:$f...
    99+
    2023-05-18
    PHP匿名函数 PHP闭包函数 PHP Lambda函数
  • JavaScript中如何使用匿名函数
    这篇文章将为大家详细讲解有关JavaScript中如何使用匿名函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。循环结构中的JavaScript匿名函数先看...
    99+
    2022-10-19
  • Golang如何使用匿名函数
    这篇文章将为大家详细讲解有关Golang如何使用匿名函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。匿名函数的两种使用方式一、在定义匿名函数的时候就可以直接使用(这种方式只使用一次)package&nb...
    99+
    2023-06-08
  • C++11中匿名函数lambda的使用详解
    目录一、lambda基础介绍二、lambda使用例子2.1 STL算法中的回调函数2.2 回调函数2.3 多线程编程三、总结官方介绍: C++ lambda是C++11新增的一种匿名...
    99+
    2023-05-18
    C++11匿名函数lambda使用 C++11匿名函数lambda C++11匿名函数
  • C++11中的lambda匿名函数怎么使用
    本篇内容主要讲解“C++11中的lambda匿名函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11中的lambda匿名函数怎么使用”吧!lambda 源自希腊字母表中第 11 ...
    99+
    2023-07-04
  • python如何使用匿名函数lambda
    这篇文章主要介绍python如何使用匿名函数lambda,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!匿名函数 lambda所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。lambda 只是一个表达式...
    99+
    2023-06-03
  • C#中如何使用匿名类型
    这篇文章将为大家详细讲解有关C#中如何使用匿名类型,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#匿名类型在C#里有这样一些类型,它是作为临时储存数据的,生命周期只在这个方法内,方法结束了...
    99+
    2023-06-18
  • top-level如何在C#9 中使用
    本篇文章为大家展示了top-level如何在C#9 中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。顶级程序在 C# 9.0 之前,下面的写法在 Console 程序中已经是最小化的了。usin...
    99+
    2023-06-14
  • C++中static如何使用
    今天就跟大家聊聊有关C++中static如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。要理解static,就必须要先理解另一个与之相对的关键字,很多人可能都还不知道有这个关键...
    99+
    2023-06-17
  • Go语言中init函数与匿名函数使用浅析
    目录init函数基本介绍注意事项和细节案例匿名函数介绍调用方式方式1方式2init函数 基本介绍 每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架...
    99+
    2023-01-16
    Go init函数与匿名函数 Go init函数 Go匿名函数
  • python中匿名函数使用什么保留字
    python中的匿名函数一般是使用lambda保留字,python中的保留字有以下几种:lambda:匿名函数;raise:触发异常后,后面的代码不会再执行;del:删除变量;in:迭代器;try,except:尝试一个可能抛出异常的程序块...
    99+
    2022-10-14
  • GO语言不固定参数函数与匿名函数如何使用
    这篇文章主要介绍“GO语言不固定参数函数与匿名函数如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“GO语言不固定参数函数与匿名函数如何使用”文章能帮助大家解决问题。不固定参数函数在go语言中,...
    99+
    2023-07-05
  • 如何在java中使用匿名内部类
    本篇文章为大家展示了如何在java中使用匿名内部类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象...
    99+
    2023-06-14
  • 在python中使用匿名函数时需要注意哪些问题
    在python中使用匿名函数时需要注意哪些问题?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工...
    99+
    2023-06-14
  • C语言中如何使用static
    这篇文章主要介绍C语言中如何使用static,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.static 可以修饰局部变量首先让我看看这段代码#include<stdio.h>void tes...
    99+
    2023-06-22
  • C++ 中如何使用static关键字
    C++ 中如何使用static关键字,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、静态全局变量在全局变量前,加上C++ static关键字,该变量就被定义成...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作