gpt4 book ai didi

c# - 需要 "Dependency Properties"的简短而清晰的定义

转载 作者:可可西里 更新时间:2023-11-01 03:00:17 24 4
gpt4 key购买 nike

我试图弄清楚依赖属性到底是什么,但是当我在任何地方寻找定义时,我只找到“如何使用”而不是“它是什么”。想象一下,你在面试时被问及什么是依赖属性。你会怎么回答?

最佳答案

DependencyProperty 是一种属性,其值取决于(或可以取决于)其他一些来源(例如动画、数据绑定(bind)、样式或可视化树继承)。常规属性的值存储在它所属的对象中,而您可以认为依赖属性存储在某个数据库中。该数据库基本上由一个字典组成,该字典将 (object, property) 对映射到它们的值,以及哪些属性依赖于其他属性的映射(例如,当您更改面板的 DataContext 时,它可以通知面板内的所有 child )。

那么为什么他们将属性值存储在某个神奇的数据库中呢?有几个原因:

  • 它减少了存储空间。向类添加属性(即使它的值为 null)会向该类的每个实例添加 4 个字节(对于 64 位进程为 8 个字节)的空间。 DependencyProperty 仅在实例具有值时占用空间。例如,一个 FrameworkElement 有几十个依赖属性,其中大部分从未被赋值。如果所有这些属性都存储在类中,则每个实例将有数百个字节。相反,每个实例只有大约 40 个字节。

  • 它启用附加属性。 Canvas.Left 等属性和 Grid.Row必须存储在从未听说过 Canvas 的对象上或 Grid ,所以你把它们放在哪里?你将它们放在某个数据库中。

  • 它启用自动属性更改。想象一下您将如何实现诸如样式或属性继承之类的东西(能够在父元素上设置诸如字体或数据上下文之类的东西并将其值传播到所有子元素)。将所有这些存储在数据库中使得代码全部集中在一个地方,而不是为需要它的每个对象和属性单独实现。

关于c# - 需要 "Dependency Properties"的简短而清晰的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2505234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com