有人可以解釋我使用自動實現的屬性c#背後的想法是什麼?自動執行的屬性c#
public class Customer { public int ID { get; set; } public string Name { get; set; } }
我得到了使用私人領域屬性的動機,因此我們可以確定如何訪問私人領域。但是在這裏 - 就像定義該領域從第一位開始公開一樣。沒有?
將字段定義爲「公共常量」還是將其定義爲具有隻讀屬性之間有區別嗎?
回答
公共自動屬性與公共字段不同,它們不是二進制兼容的。如果你實現一個公共領域,並且稍後想要添加一些邏輯,則必須將其更改爲一個屬性,從而引入重大更改(由於二進制不兼容)。這就是爲什麼許多慣例聲明你不應該公開領域而是使用屬性。
所以,對於任何簡單的非私有類值成員來說,自動屬性只是一個方便的起點,允許在稍後添加邏輯的同時保持二進制兼容性。
我會讓MSDN在這裏做的說話....
「在C#3.0及更高版本,自動實現的屬性使屬性聲明更簡潔當屬性訪問器不需要額外的邏輯。他們當你聲明一個屬性如下面的例子(例如見MSDN文章),所示時,編譯器創建一個私人的匿名支持字段,只能通過屬性的get和set訪問器來訪問「
可能是最有利的二fference是你可以做前/後驗證,提高PropertyChanged
事件等
定義一個字段爲「公共常量」或定義它具有隻讀屬性之間有區別嗎?
是的,只讀字段必須有專用字段聲明。該字段可以在內部由類更改,將字段標記爲常量意味着它不能修改。
2:一個公共常量必須在編譯時定義,您不能使用引用對象。只有從System.ValueType繼承的類(字符串,整數,雙,...)
一個const也是靜態的,而只有一個獲取方法的屬性是不是(每個類都有它自己的實例。)
關於1:建議使用自動實現的屬性,因爲您可以稍後實施其他邏輯而不會中斷更改。這方面的一個例子可以在Learning about Auto-Implemented Properties
自動實現的屬性本質上是語法糖。一旦編譯完成,後備存儲就存在。它只是不可用的源代碼。
正如其他人所說,屬性和字段是不相同的。字段和屬性不兼容,因此它們之間的變化是一個突破性變化。另外,您不能使用與字段的數據綁定。
最後一點。雖然在你的案例中,這個例子和公共領域之間的功能差別很小,但你可以改變其中一個訪問者的可見性。所以,要創建使用自動屬性只讀屬性,你可以這樣做:
public int ID { get; private set; }
在這種情況下,get訪問是公共的,按照整個簽名,但set訪問是私人的。
- 1. VB10,自動執行的屬性和COM
- 2. 何時執行C#自動屬性初始化?
- 3. 訪問自動屬性 - C#
- 4. C#CodeDom自動屬性
- 5. 獲取在行動中執行方法的自定義屬性
- 6. 執行屬性
- 7. C#惰性加載自動屬性
- 8. 單元測試自動執行的屬性是否有價值
- 9. 自定義執行財產屬性
- 10. 在C#中,我可以讓自動屬性在屬性的幫助下執行一些額外的工作嗎?
- 11. C#中自動實現的屬性
- 12. 在C#中自動生成的屬性
- 13. 自動屬性
- 14. C# - 自動屬性VS 3.0之前的屬性
- 15. 在javascript中自動執行函數作爲對象屬性值
- 16. Ruby/Rails - 爲模型屬性執行自動計算
- 17. 意外的C#行爲與自動屬性和構造函數
- 18. 動態刪除屬性的C#屬性
- 19. 用Codedom生成C#自動屬性
- 20. C#類屬性getter調用自動
- 21. 在asp.net c中自動完成屬性#
- 22. C#自動屬性 - 設置默認值
- 23. C#:DataGridView屬性自動更改?
- 24. 重構C#自動屬性字段和getter/setter屬性?
- 25. C#自定義屬性屬性反射
- 26. 自動屬性(LINQ)
- 27. PHP自動執行
- 28. C#UserControl自定義屬性
- 29. 如何使Product Version屬性自動匹配可執行文件的版本號
- 30. [assembly:attribution ??執行代碼的自定義程序集屬性
[c#:可能有重複的純粹公共屬性](http://stackoverflow.com/questions/2901591/c-what-is-the-point-in-having-a-purely - 公有財產) – 2010-05-25 09:08:58
和http://stackoverflow.com/questions/1277572,http://stackoverflow.com/questions/1272521,http://stackoverflow.com/questions/1180860和更多 – 2010-05-25 09:21:33
可能重複的[在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