Property
一、属性
- 数据的可访问性:通过public/private区分;
- 数据对类/实例有意义:通过static区分
加static:静态成员,只有一个拷贝;
不加static:非静态成员,每个实例都有一个拷贝。
字段的访问权限
如上图所示,用非private字段标记数据,直接把数据暴露给外界,很不安全,于是我们选择用private标记字段,但用一对非private方法来包装它:
- set:负责判断数据的有效性并写入数据;
- get:负责把字段里的数据读取出来。
get/set方法称为private字段的安全包装,.NET Framework将get/set方法合并成(CLR)属性(Property),即:CLR属性是private字段的安全访问包装!
二、依赖属性
- 依赖对象(DependencyObject):WPF允许对象在被创建时具有一下能力:
- 不包含存储数据的空间;
- 只保留在需要用到数据时能够获得默认值;
- 借用其他对象数据或实时分配空间的能力。
- 依赖属性(DependencyProperty):
- 自己没有值,但可以通过使用Binding,从数据源获得值(依赖在别人身上);
- 依赖对象通过依赖属性获得从别人身上获取数据的能力。
DependencyObject类中有GetValue和SetValue两个方法:
public class DependencyObject : DispatcherObject
{
public object GetValue(DependencyProperty dp)
{
//...
}
public object SetValue(DependencyProperty dp)
{
//...
}
}
这两个方法都以DependencyProperty对象为参数,GetValue方法通过DependencyProperty对象获取数据;SetValue方法通过DependencyProperty对象存储值,两个方法将DependencyProperty和DependencyObject紧密地结合起来。
1. 依赖属性的声明:
DependencyProperty实例的声明特点很鲜明:引用变量由public static readonly三个修饰符修饰,实例