簡體   English   中英

何時在C#中使用get和set屬性

[英]When to use get and set properties in C#

我們什么時候應該在C#中使用get和set屬性?

如果您決定需要獲取和設置方法,那么屬性可能就是您正在尋找的。 關於為什么你會這么好的討論,以及為什么你不想使用屬性,請查看Jon Skeet的Why Properties Matter

使用屬性而不僅僅暴露內部類數據的一個很好的理由顯然是為了保護這些數據。 您可以控制各個屬性的訪問權限以及驗證正在設置的數據。 您還可以實現計算的屬性來計算值,這與您的類用戶的任何其他屬性沒有什么不同。

根據MSDN上的財產使用指南

  • 當成員是邏輯數據成員時,請使用屬性。 在以下成員聲明中,Name是屬性,因為它是類的邏輯成員。

  • 使用方法時:

    • 該操作是轉換,例如Object.ToString
    • 操作非常昂貴,您希望與用戶通信他們應該考慮緩存結果。
    • 使用get訪問器獲取屬性值會產生可觀察到的副作用。
    • 連續兩次調用該成員會產生不同的結果。
    • 執行順序很重要。 請注意,應該能夠以任何順序設置和檢索類型的屬性。
    • 該成員是靜態的,但返回一個可以更改的值。
    • 該成員返回一個數組。 返回數組的屬性可能會產生誤導。 通常需要返回內部數組的副本,以便用戶無法更改內部狀態。 這與用戶可以輕易地認為它是索引屬性的事實相結合,導致代碼效率低下。 在下面的代碼示例中,每次對Methods屬性的調用都會創建數組的副本。 結果,將在以下循環中創建2n + 1個陣列副本。

為什么要使用屬性而不是Get / Set方法有兩個獨立的(廣義上說)原因:

  1. 你想要一個字段的簡潔,但希望授予對“outside”的只讀訪問權限,同時對“inside”進行readwrite-access。
  2. 你想要一個領域的簡潔和內涵,同時秘密地能夠強制或操縱引擎蓋下的東西,例如:
    1. 要求在一定范圍內的值(在設定期間)。
    2. 自動清理或夾緊某些值(在設定期間)。
    3. 更新(或推遲更新)其他相關數據(在設置期間)。
    4. 避免該字段所需的完整計算,直到實際使用該字段(在獲取期間)。
    5. 否則你需要在方法中放置其他任何東西,但如果外界仍將其視為一個場,則更願意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM