首頁 > 後端開發 > C++ > 在屬性和字段初始化器中,C#'s` =>`ocerator有什麼區別?

在屬性和字段初始化器中,C#'s` =>`ocerator有什麼區別?

DDD
發布: 2025-01-30 23:06:12
原創
308 人瀏覽過

What's the Difference Between C#'s `=>` Operator in Properties and Field Initializers?

C# 中 => 運算符在屬性和字段初始化器中的區別

C# 代碼中的 => 運算符用於表達式主體成員,這提供了一種簡潔的方式來定義屬性或方法。與 lambda 表達式不同,表達式主體成員在幕後生成特定的成員實現。

使用 => 的屬性 getter

以下代碼舉例說明了表達式主體屬性 getter:

<code class="language-csharp">public int MaxHealth => 
         Memory[Address].IsValid ? 
         Memory[Address].Read<int>(Offs.Life.MaxHp) : 
         0;</code>
登入後複製

編譯器將此語句解釋為一個屬性,其 getter 定義如下:

<code class="language-csharp">public int MaxHealth
{
    get
    {
        return Memory[Address].IsValid ? Memory[Address].Read<int>(Offs.Life.MaxHp) : 0;
    }
}</code>
登入後複製

與字段初始化器的字段的區別

比較表達式主體屬性和帶有字段初始化器的字段,我們觀察到:

<code class="language-csharp">// 表达式主体成员属性
public int MaxHealth => x ? y : z;

// 带有字段初始化器的字段
public int MaxHealth = x ? y : z;</code>
登入後複製

關鍵區別在於獲取值的方式。表達式主體屬性 getter 在每次訪問屬性時都會被調用,而字段初始化器在實例創建期間只賦值一次。

不是 lambda 表達式

需要注意的是,表達式主體成員與 lambda 表達式不同。 lambda 表達式生成委託實例或表達式樹,而表達式主體成員指示編譯器構造相應的成員實現。

擴展到其他成員類型

表達式主體成員可以應用於各種成員類型,包括屬性、索引器、方法和運算符。但是,它們不適用於嵌套類型、事件或字段。

以上是在屬性和字段初始化器中,C#'s` =>`ocerator有什麼區別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板