欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在C#9 中使用static匿名函數(shù)

 更新時間:2021年03月31日 11:51:05   作者:碼農(nóng)讀書  
這篇文章主要介紹了如何在C#9中使用static匿名函數(shù),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

匿名函數(shù) 在 C# 中已經(jīng)出現(xiàn)很多年了,雖然匿名函數(shù)用起來很爽,但代價是不小的,為了避免不必要那些你意想不到的內(nèi)存分配,這就是為什么 C#9 中引入 static 匿名函數(shù)的原因,這篇文章我們將會討論如何使用 靜態(tài)匿名函數(shù) 以及為什么要用。

匿名方法的代價

匿名方法代價不低,因為它有 委托調(diào)用 方面的開銷,什么意思呢?如果你的 lambda 里需要捕獲封閉方法的局部變量或者參數(shù),那么就會存在兩種堆分配,一種是委托上的分配,另一種是閉包上的分配,如果你的 lambda 僅僅捕獲一個封閉方法的實例狀態(tài),那么僅會有委托分配,如果你的 lambda 什么都不捕獲或者僅捕獲一個靜態(tài)狀態(tài),那么就沒有任何分配。

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

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

上面代碼的 lambda 中需要獲取 y,所以就有了意想不到的堆分配,要想解決,可以將 y 定義為 const 或者 static 來避免這種不必要的分配開銷,修改代碼如下:

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

為了避免這種不必要和浪費內(nèi)存的分配,可以在 lambda 上使用 static 關(guān)鍵詞 及 變量上標注 const,值得注意的是,static 匿名函數(shù)不能訪問封閉方法的局部變量和參數(shù)和 this 指針,但可以引用它的 靜態(tài)方法 和 常量。

C#9 中使用靜態(tài)匿名方法

先看一下例子:

    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 所捕獲,這也就意味著它會產(chǎn)生你意料之外的內(nèi)存分配,把程序跑起來之后,會看到如下的輸出。

為了避免這種內(nèi)存分配,你只需要做兩件事。

  • 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();
        }
    }

現(xiàn)在就沒有任何你意料之外的分配了,我想這也是你想要的。

現(xiàn)在你可以使用 static + const 組合來提升應(yīng)用程序性能了,同時也可以有效的阻止在 lambda 中誤用封閉方法中的局部變量和參數(shù)引發(fā)的不必要開銷。

以上就是如何在C#9中使用static匿名函數(shù)的詳細內(nèi)容,更多關(guān)于C#9 中使用static匿名函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    這篇文章介紹了C#操作SQLite數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#封裝DBHelper類

    C#封裝DBHelper類

    DBHelper類是用類將ADO.NET用方法封裝起來,用以減少程序員的工作量。本文為大家提供一個C#封裝的DBHelper類,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • c# JSON返回格式的WEB SERVICE

    c# JSON返回格式的WEB SERVICE

    首先用c#創(chuàng)建一個web service,主要是利用其WSDL的功能,當然也可以利用php創(chuàng)建一個,道理都是一樣的
    2008-12-12
  • Unity UGUI的Image圖片組件使用詳解

    Unity UGUI的Image圖片組件使用詳解

    這篇文章主要為大家介紹了Unity UGUI的Image圖片組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • c# 如何實現(xiàn)圖片壓縮

    c# 如何實現(xiàn)圖片壓縮

    這篇文章主要介紹了c# 實現(xiàn)圖片壓縮的示例,幫助大家更好的理解和學習c#,感興趣的朋友可以了解下
    2020-11-11
  • C# 向二進制文件進行讀寫的操作方法

    C# 向二進制文件進行讀寫的操作方法

    該例子使用 BinaryStream 和 BinaryWriter 對二進制文件進行讀寫操作先上代碼再根據(jù)我理解的所分享給各位朋友
    2013-04-04
  • C# Redis學習系列(一)Redis下載安裝使用

    C# Redis學習系列(一)Redis下載安裝使用

    這篇文章主要為大家分享了C# Redis學習系列教程第一篇, Redis下載、安裝、使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • c# 顏色選擇控件的實現(xiàn)代碼

    c# 顏色選擇控件的實現(xiàn)代碼

    這篇文章主要介紹了c# 顏色選擇控件的實現(xiàn)代碼,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 詳解C#如何實現(xiàn)隱式類型轉(zhuǎn)換

    詳解C#如何實現(xiàn)隱式類型轉(zhuǎn)換

    Result?類型是許多編程語言中處理錯誤的常用方式,包括?C#?的?dotNext?庫。在本文中,我們將通過例子回顧?C#?中?using?語句和隱式類型轉(zhuǎn)換的使用,感興趣的可以了解一下
    2023-01-01
  • C#(.net)中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題的解決

    C#(.net)中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題的解決

    這篇文章主要給大家介紹了關(guān)于C#(.net)中按字節(jié)數(shù)截取字符串最后出現(xiàn)亂碼問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-06-06

最新評論