從兩者的聲明上來看,公共字段只是類用public修飾符所公開的簡單公共變量,而屬性則是對字段的封裝,它使用get和set訪問器來控制如何設置或返回字段值。
由於屬性的實質是方法(get或set方法),在IL中是沒有屬性的概念的。所以對於開發過程中常用的賦值和取值操作來說,使用公共變量肯定會比使用屬性速度要快,性能上也稍高(方法和變量哪個速度不用說了吧)。
公共字段雖然在速度上快,但它必須開放字段為public,這樣一來對象的調用者便可以直接修改其值,值的內容是否合法,運行中是否會出錯,就沒有了保障,進而會大大降低類的可重用性;相反,屬性類似於方法,它可以對存入的變量的值進行處理,如果覺得該值不合法,可以就地變換或者直接提出警告。這對該類的對象的使用安全有很大好處,在運行過程中,因公共變量值的錯誤而產生的問題會大大減少。
從上述內容來看,兩者各有優缺點,在實際項目開發過程中,我們究竟選擇使用哪一種方式呢?
如果滿足下面幾個條件,那麼我們便可以大膽地使用公共字段:
1. 允許自由讀寫;
2. 取值范圍只受數據類型約束而無其他任何特定限制;
3. 值的變動不需要引發類中其它任何成員的相應變化;
屬性的使用條件則恰好跟變量相反,只要滿足下面任何一個條件,就應該使用屬性:
1. 要求字段只能讀或者只能寫;
2. 需要限制字段的取值范圍;
3. 在改變一個字段的值的時候希望改變對象的其它一些狀態;
總結:雖然在實際項目的開發過程中,公共字段和屬性在合適的條件下都可以使用,但是我們應該盡可能的使用屬性(property),而不是數據成員(field);把所有的字段都設置為私有字段,如果要暴露它們,則把它們封裝成屬性,這也是微軟推薦的方式。
http://www.cnblogs.com/netlyf/archive/2010/12/20/1910977.html