字段和属性的区别

今天写一个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

相关文章
相关标签/搜索