WPF笔记之属性和依赖属性
属性
新来的MM埋头学习C#,有一天跑来问我:“师兄,什么是属性?”我对她说:“学姐,我也是新来的。”
记得MSDN的文档里介绍说:C#的类里有Property和Attribute,对于我这个英语一般般的人是一个考验,Property和Attribute不是同义词吗?嗯,是的,谷歌的翻译也是一样的,这就造成了理解的困难,下面介绍一下到底什么是Property,什么事Attribute。
经过我不懈的理解,不断的理解,不停的理解,我可以很明确的告诉你,Property就是Attribute,不信的话我们来看一段代码(代码一):
using System;
class PropertyAndAttribute
{
private string name;
private int age;
public string getName() {
return name;
}
public void setName(string name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
上面这段代码声明了两个attribute,也就是字段,这个在java里也可以这么定义,不过C#为我们提供了另一种更简洁的书写方式,见下面代码(代码二):
using System;
class PropertyAndAttribute
{
private string name;
private int age;
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
这样是不是就很简洁了,如果你感觉还是不爽的话,C#还有一种写法,见下面代码(代码三):
class PropertyAndAttribute {
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
}
这样的代码是不是很简单,这就是C#里的属性声明方式,这种声明表面上看好像没有定义字段,但是其实编译器还是为我们的代码自动生成了一个匿名的备份字段,这点可以通过反编译生成的代码看出来,由此可见,C#里的属性其实是字段的变种,这一点对于我们理解依赖属性至关重要。
依赖属性
依赖属性,我们首先要明确一个概念,依赖属性依然是一个属性,也就是说依赖属性依然是一个字段,可是同样都是字段,为什么它会叫做依赖属性呢?它肯定有它的特殊之处,下面我就我今天下午的理解给大家解释一下,首先我们看一段声明依赖属性的代码(代码四):
public partial class MainWindow : Window
{
private static DependencyProperty myProperty;
public MainWindow()
{
InitializeComponent();
myProperty = DependencyProperty.Register("CustomProperty",//依赖属性的名称
typeof(string),//依赖属性的类型
typeof(MainWindow),//依赖属性的所有者
new PropertyMetadata("属性默认值",callBackFunction));//依赖属性值发生改变时触发的函数
}
//依赖属性值改变的触发函数
public void callBackFunction(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
MessageBox.Show(this.GetValue(myProperty).ToString());
}
}
浙公网安备 33010602011771号