在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));
简短的回答是肯定的。
从属属性值的下划线存储没有值类型的概念,并将所有内容存储为对象,这将导致装箱。框架本身使用了一个"聪明的技巧"来进行布尔属性存储优化,通过一个helper类BooleanBoxes,它将true和false值存储为装箱对象。
一般来说,如果你有一些自定义属性,你没有什么可担心的。然而,如果你有一个复杂的场景,有成千上万的自定义依赖对象飞来飞去,你可能想要考虑装箱/拆箱性能优化。
除了其他答案:
当WPF读取或更改依赖属性(绑定和动画)时,它不会使用这些setter和getter。因此,您在代码中显示的(un)boxing将不会被执行。
你展示的这些setter和getter是为我们这些开发人员准备的。
它可能会使用装箱,但由于这是用户可伸缩的,因此不应该发生在会产生问题的规模上。
请注意,通常也会涉及转换器。