簡體   English   中英

人們使用 get 屬性的原因是什么? 放; 而不是字段?

[英]What's the reason for peoples to use properties with get; set; instead of fields?

我經常在類中看到屬性,而不是字段。 它看起來像這樣:

class TestClass
{
    public ulong Id { get; set; }
    public string Description { get; set; }
}

為什么人們這樣做? 他們可以改用字段。 我在那里至少看到了 single pro - 我們可以將帶有ref關鍵字的字段傳遞給函數。 是否有任何專業人士出於財產或其他原因使用它們

主要原因是封裝 - 值只能通過相應的屬性進行更改,即使您后來決定該屬性不應該只返回一個值,情況仍然如此。 也許您發現當值發生變化時您會想要觸發一個事件? 如果你有財產,那很容易。 如果您有公共領域,則需要進行重大更改。

此外,屬性可以是虛擬的或在接口中聲明。 它們可以被聲明為只讀。

哦,它有助於調試:如果您想知道誰在更改您的值(意外),您可以在“集合”上設置一個斷點。

人們使用屬性而不是字段主要是由於編碼約定。 如果它不執行任何實際封裝(在 POCO 的情況下),那么 C# 沒有太大區別。大多數時候可以使用字段而不是屬性,而不會產生任何后果。

// This:
public string MyValue;
// Could be later on changed to this:
public string MyValue { get; set; }
// With no compatibility issues.

雖然推測為什么約定是這樣很有趣。 在 C# 中,從消費者的角度來看,屬性和字段之間的差異大部分是隱藏的。 在舊語言中不一定是這種情況。 也就是說,在 Java 中,您必須顯式地編寫 getter 和 setter 方法。 因此,如果您在 Java 中有一個字段,現在您決定要封裝它,那么您將需要 go 覆蓋該字段的所有用法,並改為使用 getter 和 setter。 如果您使用動態庫鏈接(以前曾是流行的部署方式),這可能是一個更大的問題。 因此,從一開始就更容易封裝字段,這樣以后就不會有向后兼容性問題。 自然地,這些約定也傳播到其他語言。

暫無
暫無

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

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