2010-05-25 47 views
10
  1. 有人可以解釋我使用自動實現的屬性c#背後的想法是什麼?自動執行的屬性c#

    public class Customer 
    { 
        public int ID { get; set; } 
        public string Name { get; set; } 
    } 
    

    我得到了使用私人領域屬性的動機,因此我們可以確定如何訪問私人領域。但是在這裏 - 就像定義該領域從第一位開始公開一樣。沒有?

  2. 將字段定義爲「公共常量」還是將其定義爲具有隻讀屬性之間有區別嗎?

+1

[c#:可能有重複的純粹公共屬性](http://stackoverflow.com/questions/2901591/c-what-is-the-point-in-having-a-purely - 公有財產) – 2010-05-25 09:08:58

+0

和http://stackoverflow.com/questions/1277572,http://stackoverflow.com/questions/1272521,http://stackoverflow.com/questions/1180860和更多 – 2010-05-25 09:21:33

+0

可能重複的[在C#3.0 +中的屬性和字段的區別](http://stackoverflow.com/questions/653536/difference-between-property-and-field-in-c-sharp-3-0) – nawfal 2013-06-03 18:28:29

回答

16

公共自動屬性與公共字段不同,它們不是二進制兼容的。如果你實現一個公共領域,並且稍後想要添加一些邏輯,則必須將其更改爲一個屬性,從而引入重大更改(由於二進制不兼容)。這就是爲什麼許多慣例聲明你不應該公開領域而是使用屬性。

所以,對於任何簡單的非私有類值成員來說,自動屬性只是一個方便的起點,允許在稍後添加邏輯的同時保持二進制兼容性。

5

屬性可以是數據綁定,而字段不能。

+0

我想,這是他們被髮明的唯一真正原因...... – SergeyT 2015-07-23 14:04:02

2

我會讓MSDN在這裏做的說話....

「在C#3.0及更高版本,自動實現的屬性使屬性聲明更簡潔當屬性訪問器不需要額外的邏輯。他們當你聲明一個屬性如下面的例子(例如見MSDN文章),所示時,編譯器創建一個私人的匿名支持字段,只能通過屬性的get和set訪問器來訪問「

可能是最有利的二fference是你可以做前/後驗證,提高PropertyChanged事件等

定義一個字段爲「公共常量」或定義它具有隻讀屬性之間有區別嗎?

是的,只讀字段必須有專用字段聲明。該字段可以在內部由類更改,將字段標記爲常量意味着它不能修改

1

2:一個公共常量必須在編譯時定義,您不能使用引用對象。只有從System.ValueType繼承的類(字符串,整數,雙,...)

一個const也是靜態的,而只有一個獲取方法的屬性是不是(每個類都有它自己的實例。)

3

自動實現的屬性本質上是語法糖。一旦編譯完成,後備存儲就存在。它只是不可用的源代碼。

正如其他人所說,屬性和字段是不相同的。字段和屬性不兼容,因此它們之間的變化是一個突破性變化。另外,您不能使用與字段的數據綁定。

最後一點。雖然在你的案例中,這個例子和公共領域之間的功能差別很小,但你可以改變其中一個訪問者的可見性。所以,要創建使用自動屬性只讀屬性,你可以這樣做:

public int ID { get; private set; } 

在這種情況下,get訪問是公共的,按照整個簽名,但set訪問是私人的。