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

时间:2011-10-19 08:28:08

标签: wpf dependency-properties

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

public static readonly DependencyProperty DepProperty = DependencyProperty.Register(...);

而不是那样:

protected static readonly DependencyProperty DepProp = DependencyProperty.Register(...);

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

public bool Dep
{
    get { return (bool)GetValue(DepProperty); }
    set { SetValue(DepProperty, value); }
}

2 个答案:

答案 0 :(得分:5)

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

  

依赖项属性安全注意事项

     

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

无论如何,将它们暴露为public并没有任何伤害,我会聚集在一起。

答案 1 :(得分:0)

依赖属性通常应被视为公共属性,可由任何有权访问实例的调用者访问或至少可被发现。

我认为“依赖属性安全考虑因素”一节 “在下面的链接可以帮助您理解为什么依赖属性以这种方式实现/注册,以及更多内容:

http://msdn.microsoft.com/en-us/library/ms753358.aspx

由于