1. 程式人生 > >字段和屬性的區別

字段和屬性的區別

明顯 支持 rpath 使用 ber mem box pla false

今天寫一個wpf的demo,用到綁定數據,給控件綁定了數據源,但是數據卻沒有顯示出來,排查代碼發現綁定數據源的的成員用的是字段不是屬性。

前端代碼:

<Grid>
  <StackPanel Grid.Row="2" Margin="10">
  <ListBox x:Name="listBox" Height="100">

  </ListBox>
  </StackPanel>
</Grid>

後臺代碼:

public Window3()
        {
            InitializeComponent();
            List
<Employe> list = new List<Employe>() { new Employe() { name="jack",age=18}, new Employe() { name="bob",age=20}, new Employe() { name="alice",age=21} }; listBox.ItemsSource = list; listBox.DisplayMemberPath
= "name"; listBox.SelectedValuePath = "age"; }
//實體 
public class Employe
        {
            public string name { get; set; }
            public int age { get; set; }
        }

如果把Employe的name,去掉{get;set;},改為一個字段, public string name;數據就無法綁定了。原因是屬性的訪問是由訪問器完成的,因而屬性可以進行數據綁定。

網上的文章有很多,但是好些沒說到重點,基本都是說屬性可以保護數據安全雲雲之類,整理了一下,有一下幾個區別:

相同點:
都是類的成員,屬性是類的屬性,而字段是類的數據成員

不同點:
1 屬性可進行數據綁定
2 屬性可通過set和get方法進行數據安全性檢驗,而字段不行
3 屬性可進行線程同步
public string Name
{
set{
lock(this)
{
}
}
}
4 屬性可以是抽象的,而字段不行
5 屬性可以接口的形式表現
6 基於屬性的索引
7 不要直接把字段轉化為屬性

MSDN:

屬性與字段

屬性與字段都可在對象中存儲和檢索信息。它們的相似性使得在給定情況下很難確定哪個是更好的編程選擇。
在以下情況下使用屬性過程:
1. 需要控制設置或檢索值的時間和方式時。
2. 屬性有定義完善的一組值需要進行驗證時。
3. 設置值導致對象的狀態發生某些明顯的變化(如 IsVisible 屬性)。
4. 設置屬性會導致更改其他內部變量或其他屬性的值時。
5.必須先執行一組步驟,然後才能設置或檢索屬性時。
在以下情況下使用字段:
1. 值為自驗證類型時。例如,如果將 True 或 False 以外的值賦給 Boolean 變量,就會發生錯誤或自動數據轉換。
2. 在數據類型所支持範圍內的任何值均有效時。Single 或 Double 類型的很多屬性屬於這種情況。
3. 屬性是 String 數據類型,且對於字符串的大小或值沒有任何約束時

字段和屬性的區別