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中文網其他相關文章!