使用自動屬性後,你可以不用手工聲明一個私有成員變量以及編寫get/set邏輯,取而代之的是,編譯器會自動為你生成一個私有變量和默認的get/set 操作。系統為你產生的私有變量在IDE中,你是看不到的,如下圖:
當然如果你希望屬性中有些賦值或者取值邏輯校驗,自動屬性可是不適合你的。
上面的代碼我們編譯後,再用 Reflector 反編譯後,我們可以看到上述代碼中的屬性變成了如下代碼:這個編譯器給我們產生的私有變量,顯然不是那麼容易重名的。
注意:如果你只希望屬性有 get 或者 set 方法,這些情況都是無法使用 自動屬性的,需要你自己來書寫。否則就會報如下的錯誤:
'ConsoleApplication1.MyClass.Name.set' must declare a body because it is not marked abstract or extern. Automatically implemented propertIEs must define both get and set Accessors.但是 get 和 set 訪問級別不一樣,比如一個是 public,一個是 internal,則可以書寫成下述方式,而不會報錯誤。
public int ID { get; internal set; }