属性
新来的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()); } }