在WPF中,当与值类型一起使用时,DependencyProperty's会导致大量的装箱/拆箱操作

本文关键字:操作 WPF 类型 一起 DependencyProperty | 更新日期: 2023-09-27 18:03:56

在WPF中,当与值类型一起使用时,DependencyProperty的原因是大量的装箱/拆箱?或者实现如何防止这种情况,而不是box/unbox值类型?那么他们是怎么做到的呢?

我认为值类型是DependencyPropertys的主要用例。

感谢
    public double Price
    {
        get { return (double)GetValue(PriceProperty); }
        set { SetValue(PriceProperty, value); }
    }

    public static readonly DependencyProperty PriceProperty =
        DependencyProperty.Register("Price", typeof(double), typeof(Quote), new UIPropertyMetadata(0.0d));

在WPF中,当与值类型一起使用时,DependencyProperty's会导致大量的装箱/拆箱操作

简短的回答是肯定的。

从属属性值的下划线存储没有值类型的概念,并将所有内容存储为对象,这将导致装箱。框架本身使用了一个"聪明的技巧"来进行布尔属性存储优化,通过一个helper类BooleanBoxes,它将true和false值存储为装箱对象。

一般来说,如果你有一些自定义属性,你没有什么可担心的。然而,如果你有一个复杂的场景,有成千上万的自定义依赖对象飞来飞去,你可能想要考虑装箱/拆箱性能优化。

除了其他答案:

当WPF读取或更改依赖属性(绑定和动画)时,它不会使用这些setter和getter。因此,您在代码中显示的(un)boxing将不会被执行。

你展示的这些setter和getter是为我们这些开发人员准备的。

它可能会使用装箱,但由于这是用户可伸缩的,因此不应该发生在会产生问题的规模上。

请注意,通常也会涉及转换器。