第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

表達式主體屬性和簡單 Getter 屬性之間的區(qū)別

表達式主體屬性和簡單 Getter 屬性之間的區(qū)別

C#
UYOU 2023-07-22 15:38:35
在閱讀了不同 c# 項目的一些源代碼后,我注意到關于公共“getter”和私有“setter”屬性的相同語句的不同編寫方式(幾乎)。第一種只有屬性的方法:public int x { get; private set; }具有表達式主體屬性的第二種方式:private int _x; public int x => _x;我知道這public int x { get; }相當于private readonly int __x; public int x { get { return __x } }所以我理解在單個“getter”的情況下表達式主體和普通屬性之間的區(qū)別。我不明白的是當有一個私有字段保存引用值時的區(qū)別。我認為也許第二個更快,因為您可以直接訪問該字段,而不是在類中調用方法。這只是一種風格上的差異,還是其中一個例子更快、更強大等等?
查看完整描述

3 回答

?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

您有兩組等效的構造。


第 1 組


當您不需要對構造函數外部的支持字段進行寫訪問時,可以使用以下任何構造:


private readonly int _x;

public int x => _x;

或者


private readonly int _x;

public int x { get => _x; }

或者


private readonly int _x;

public int x { get { return _x; } }

或者


public int x { get; }

第2組


當您需要訪問構造函數外部的支持字段時,可以使用以下任何構造:


private int _x;

public int x => _x;

或者


private int _x;

public int x { get => _x; }

或者


private int _x;

public int x { get { return _x; } }

或者


public int x { get; private set; }

您可以預期所有替代方案都同樣快。在最后一個構造中,編譯器將注入一個 setter 方法(對于每個自動屬性,它也會注入一個支持字段)。在其他情況下,您可以直接訪問該字段。注入的 setter 幾乎肯定會被抖動內聯,這消除了方法調用的性能損失。查看此問答以了解有關 JIT 內聯的詳細信息。


自動屬性當然更簡潔,這使您的代碼更整潔,尤其是當您有很多屬性時。但歸根結底,這取決于個人喜好(或您團隊的編碼規(guī)則)。


查看完整回答
反對 回復 2023-07-22
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

請注意,如果您在構造函數中初始化該屬性,甚至還有另一種可能性


public int X { get; }

這是 C# 6.0 中引入的僅 getter 屬性。您可以在構造函數中分配它(然后再也不會)


public MyClass (int x) // Constructor

{

? ? X = x;

}

或使用初始化器


public int X { get; } = 100;

你不應該關心這些事情的速度。創(chuàng)建易于閱讀且健壯的代碼。C# 編譯器或 Jitter(應用程序啟動時運行的即時編譯器,第一次調用方法)可能會內聯代碼,甚至不調用 getter 或 setter。


普通屬性、方法和構造函數與表達式主體之間的區(qū)別僅在于語法性質。行為上沒有區(qū)別。兩種變體都生成相同的編譯 IL 代碼,因此速度沒有差異。


public int X => _x;只是 的更短語法public int X { get { return _x; } }。這也稱為語法糖。



查看完整回答
反對 回復 2023-07-22
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

如果您使用私有支持字段,您將封裝信息并創(chuàng)建更健壯的代碼。在某些情況下它還提高了可讀性。
還有一個事實是,該值被安全地存儲在一個字段中,因此,如果您的 getter 和 setter 中的邏輯需要在將來更改,那么它會與實際的值存儲分離,并使將來更容易更改該實現

查看完整回答
反對 回復 2023-07-22
  • 3 回答
  • 0 關注
  • 214 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號