为什么声明DependencyProperty成员公共不受保护?

Mik*_*ogh 4 wpf dependency-properties

为什么以这种方式创建DependencyProperty成员:

public static readonly DependencyProperty DepProperty = DependencyProperty.Register(...);
Run Code Online (Sandbox Code Playgroud)

而不是这样:

protected static readonly DependencyProperty DepProp = DependencyProperty.Register(...);
Run Code Online (Sandbox Code Playgroud)

当我们拥有CLR"包装器"时,为什么我们需要从外部使用DevProp成员:

public bool Dep
{
    get { return (bool)GetValue(DepProperty); }
    set { SetValue(DepProperty, value); }
}
Run Code Online (Sandbox Code Playgroud)

Bol*_*ock 5

根据MSDN,限制性访问修饰符实际上并不提供某些API的预期访问保护,因此除了声明依赖项属性及其标识符字段之外没有任何意义public:

依赖属性安全注意事项

应将依赖属性声明为公共属性.应将依赖属性标识符字段声明为公共静态字段.即使您尝试声明其他访问级别(例如protected),也始终可以通过标识符与属性系统API一起访问依赖项属性.由于作为属性系统一部分的元数据报告或值确定API(例如LocalValueEnumerator),甚至可以访问受保护的标识符字段.有关更多信息,请参阅依赖项属性安全性.

public无论如何,暴露它们没有任何伤害,我会聚集.