依属性为什么 依赖属性和普通属性

最后更新 :2024.07.17 06:25

依赖属性和普通属性是 两种不同的属性类型, 它们在WPF(Windows Presentation Foundation)中扮演着不同的角色,并 具有不同的特点和用途。

依赖属性的特点和用途

依赖属性是WPF中特有的一种属性, 它是普通属性的一种升级版本。 依赖属性的值依赖于其他对象, 它可以没有自己的值, 这样可以大大节省实例的内存开销。 在WPF中, 每一个元素都有几十个属性, 如果我们在创建每一个元素的时候都要初始化属性并且给属性赋值, 这样会大大增加系统的内存。 WPF允许对象在被创建的时候并不包含用于存储数据的空间, 只保留能在需要用到数据的时候能够获得默认值、借用其他对象数据或实时分配空间的能力。 这种对象称为依赖对象, 而他这种实时获取数据的能力则依靠依赖属性来实现。

依赖属性的主要用途包括:

  • 根 据其他输入的值来计算属性的值, 例如主题和用户偏好之类的系统属性、数据绑定和动画/故事板之类的即时属性确定机制、资源和样式之类的多用途 模板、或者其他通过与元素树中的其他元素的父子关系而知道的值。
  • 在样式中设置该属性, 可以通过数据绑定设置该属性, 也可以使用动态资源引用设置该属性。
  • 该属性可以自动从元素树中的父元素继承其值。
  • 可以为该属性设置动画。
  • 该属性可以在属性的前一个值已更改且属性值可以被强制时进行报告。
  • 该属性向WPF报告信息, 例如更改属性值是否需要布局系统重新组合元素的视觉效果。
  • 该属性在Visual Studio的WPF设计器中获得支持, 例如可以在“属性”窗口中编辑该属性。

普通属性的特点和用途

普通属性是.NET 中常见的属性类型, 它的值通常是保存在字段中的。 普通属性的优点是简单直观, 易于理解和使用。 然而,在WPF中, 由于其特殊的呈现原理, 普通属性无法满足所有需求, 因此引入了依赖属性。 普通属性的主要用途是在程序中表示对象的状态, 通过get和set方法来访问这些状态。

两者的主要区别

依赖属性和普通属性的主要 区别在于它们的作用范围和内存管理方式:

  • 作用范围: 普通属性的值通常保存在对象的字段中, 而依赖属性的值则依赖于其他对象或系统提供的值。 这意味着依赖属性的值可以跨越多个对象和系统范围。
  • 内存管理: 普通属性需要为每个对象分配存储空间来保存其值, 而依赖属性则可以在对象创建时不立即分配存储空间, 而是等到需要使用时才获取默认值、借用其他对象的数据或实时分配空间。 这样可以节省内存。

结论

在选择使用依赖属性还是普通属性时, 应根据具体的需求和场景来决定。 如果需要实现复杂的绑定、动画或样式等功能, 依赖属性将是更好的选择;而如果只需要简单的表示对象状态, 那么普通属性就足够了。

看更多