91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

static匿名函數怎么在C#9 中使用

發布時間:2021-03-31 15:28:34 來源:億速云 閱讀:163 作者:Leah 欄目:開發技術

static匿名函數怎么在C#9 中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

匿名方法的代價

匿名方法代價不低,因為它有 委托調用 方面的開銷,什么意思呢?如果你的 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 所捕獲,這也就意味著它會產生你意料之外的內存分配,把程序跑起來之后,會看到如下的輸出。

static匿名函數怎么在C#9 中使用

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

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

游戏| 齐河县| 武宁县| 江川县| 西林县| 秦皇岛市| 津南区| 陆河县| 永城市| 永济市| 利川市| 古浪县| 张家口市| 乳山市| 海口市| 葵青区| 岢岚县| 漳浦县| 松阳县| 呼伦贝尔市| 揭阳市| 柳江县| 娄底市| 宁化县| 普陀区| 城步| 陆川县| 荆门市| 密山市| 永济市| 吉木萨尔县| 洞口县| 神池县| 拜泉县| 大姚县| 韶山市| 郴州市| 积石山| 保亭| 克山县| 惠安县|