字段和属性的区别
今天写一个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 数据类型,且对于字符串的大小或值没有任何约束时
上一篇: 买房要趁早