在WPF中使用UncommonField <T>

Her*_*ton 8 c# wpf

我刚刚完成了WindowsBase.dll >> System.Windows.UncommonField<T>,我想知道这个类的用法......例如它在Button-class中使用:

public class Button : ButtonBase
{    
    private static readonly UncommonField<KeyboardFocusChangedEventHandler> FocusChangedEventHandlerField = new UncommonField<KeyboardFocusChangedEventHandler>();
}
Run Code Online (Sandbox Code Playgroud)

那么这个"包装"的用途是什么?

Jul*_*ain 9

简短的回答

它用于降低内存使用量.

更长的答案

让我们从依赖属性开始.在每个上DependencyObject,可以定义大量的依赖属性.无论是"本地" DependencyProperty如"本地" TextBox.Text还是附加类似Grid.Row,它们中的大多数都没有设置,只保留其默认值.为了避免每个DependencyObject实例通过为每个定义的依赖项属性存储值来获取千字节的内存,只有与默认值不同的值保留在实例中.

现在迎接内部UncommonField<T>课程.您可以将其视为轻量级,DependencyProperty而无需任何元数据,强制或属性更改通知.但是,它使用DependencyProperty与其值相同的机制:它必须与默认值存储在内部DependencyObject.由于KeyboardFocusChanged事件很少使用(解释不常见的形容词),因此在这里保存一点内存是有意义的.

但是,您可能不是Microsoft编写的框架必须考虑数千个DependencyObject实例并优化几个字节.只需用static UncommonField<T> someField实例替换一个T someField.