我刚刚完成了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)
那么这个"包装"的用途是什么?
它用于降低内存使用量.
让我们从依赖属性开始.在每个上DependencyObject,可以定义大量的依赖属性.无论是"本地" DependencyProperty如"本地" TextBox.Text还是附加类似Grid.Row,它们中的大多数都没有设置,只保留其默认值.为了避免每个DependencyObject实例通过为每个定义的依赖项属性存储值来获取千字节的内存,只有与默认值不同的值保留在实例中.
现在迎接内部UncommonField<T>课程.您可以将其视为轻量级,DependencyProperty而无需任何元数据,强制或属性更改通知.但是,它使用DependencyProperty与其值相同的机制:它必须与默认值存储在内部DependencyObject.由于KeyboardFocusChanged事件很少使用(解释不常见的形容词),因此在这里保存一点内存是有意义的.
但是,您可能不是Microsoft编写的框架必须考虑数千个DependencyObject实例并优化几个字节.只需用static UncommonField<T> someField实例替换一个T someField.