日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/4 C# 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在 C#9 中使用 static 匿名函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

匿名函數 在 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 中誤用封閉方法中的局部變量和參數引發的不必要開銷。

譯文鏈接:https://www.infoworld.com/article/3609850/how-to-work-with-static-anonymous-functions-in-csharp-9.html

總結

以上是生活随笔為你收集整理的如何在 C#9 中使用 static 匿名函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。