字段和屬性的區別

今天寫一個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;數據就沒法綁定了。緣由是屬性的訪問是由訪問器完成的,於是屬性能夠進行數據綁定。this

 

網上的文章有不少,可是好些沒說到重點,基本都是說屬性能夠保護數據安全云云之類,整理了一下,有一下幾個區別:spa

 

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

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

 

MSDN:code

屬性與字段對象

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

相關文章
相關標籤/搜索