摘自《深入浅出WPF完整版》P132
程序的本质就是“数据+算法”,,这一本质一直没有改变一一类的作用只是把散落在程序中的变量和函数进行归档封装并控制对它们的访问而已。
被封装在类里的变量称为字段 (Fied)它表示的是类或实例的状态:被封装在类里的函数称为方法(Method)它表示类或实例的功能(即能做什么)。字段和方法构成了最原始的面向对象封装,这时候的面向对象概念中还不包含事件、属性等概念。
例如一个TextBox包含138个属性,每个属性要占用一个4字节的字段,有10K个TextBox就要占用5.26M内存。
属性是一个语法糖,包装了字段,并且不多占用内存。
在WPF中,微软将属性这个概念又向前推进了一步,推出了“依赖属性”(Dependency Object)这个新概念。简言之,依赖属性就是一种可以自己没有值,并能通过使用 Binding 从数据源得值(依赖在别人身上)的属性。拥有依赖属性的对象被称为“依赖对象”。与传统的 CLR 属性和面向对思想相比依赖属性有很多新颖之处,其中包括:
节省实例对内存的开销。
属性值可以通过 Binding依赖在其他对象上。
WPF 允许对象在被创建的时候并不包含用于存储数据的空间(即字段所占用的空间)、只保留在需要用到数据时能够获得默认值、借用其他对象数据或实时分配空间的能力一这种对象就称为依赖对象(Dependency Object),而它这种实时获取数据的能力则依靠依赖属性(Dependency Property)来实现。
WPF 开发中必须使用依赖对象作为依赖属性的宿主,使二者结合起来,才能形成完整的 Binding 目标被数据所驱动。
依赖对象的概念被 DependencyObject 类所实现,依赖属性的概念则由DependencyProperty类所实现。DependencyObject 具有 GetValue 和 SetValue 两个方法。
DependencyProperty等等以上依赖属性与派生,可以在CommunityToolkit.MVVM采用 ObservableObject替代。
当自定义一个类之后,类里面没有binding这个方法,但是FrameWorkElement里面都有。
Wrapper容器