wpf中的属性,依赖属性和依赖对象

一、属性的来龙去脉

程序的本质是“数据+算法”

C#语言规定:对类有意义的字段和方法使用static关键字修饰,称为静态成员;

 静态字段在内存中只有一个拷贝,非静态字段则是每个实例拥有一个拷贝,无论方法是否为静态在内存中只会有一份拷贝。

使用属性的目的就是为了避免把数据直接暴露给外界。

属性就是Get和Set这对方法。

二、CLR属性

 .NET Framework中的属性又称为CLR属性,是private字段的安全访问包装,实例的每个CLR属性都包装着一个非静态的字段。

 

三、依赖属性

是一种可以自己没有值,并能通过使用Binding从数据源获得值的属性。

优点:1.节省实例对内存的开销;2.属性值可以通过Binding依赖在其他对象上。

重要结论:WPF所有UI控件都是依赖对象。

public class Student:DependencyObject
    {
        public string Name//CLR属性外包装
        {
            get { return (string)GetValue(NameProperty); }
            set { SetValue(NameProperty, value); }
        }

        // Using a DependencyProperty as the backing store for Name.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty NameProperty =
            DependencyProperty.Register("Name", typeof(string), typeof(Student));
    }

如代码所示,依赖对象的概念由DependencyObject类所实现依赖属性由DependencyProperty类所实现;成员变量被public static readonly 修饰,它的实例由DependencyProperty.Register创建。

private void Button_Click(object sender, RoutedEventArgs e)
{

  Student stu = new Student();
  stu.Name = this.TextBox1.Text;
  TextBox2.Text = stu.Name;

  }

上述所示就是利用依赖属性来存储值并把值读取出来,注意这样子的写法是因为用了CLR属性外包装,这样依赖属性使用时与普通的CLR属性别无二致。

尽管Student类(依赖对象)没有实现INotifyPropertyChanged接口,当属性的值发生变化时,与之关联的Binding对象依然可以得到通知。

三、依赖对象

传统的.NET开发中,一个对象所占用的内存空间在调用new操作符进行实例化时就已决定。而依赖对象在被创建时不占用空间,只保留在需要用到数据时能够获得数据,实时分配空间的能力。

上一篇:c#基础知识复习


下一篇:CLR整理