ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-08-28 22:35:19  阅读:190  来源: 互联网

标签:依赖 Name DependencyProperty Student wpf CLR 属性


一、属性的来龙去脉

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

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操作符进行实例化时就已决定。而依赖对象在被创建时不占用空间,只保留在需要用到数据时能够获得数据,实时分配空间的能力。

标签:依赖,Name,DependencyProperty,Student,wpf,CLR,属性
来源: https://www.cnblogs.com/yxzstruggle/p/15171038.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有