Wpf 为什么要将DependencyProperty成员声明为公共而不受保护?

Wpf 为什么要将DependencyProperty成员声明为公共而不受保护?,wpf,dependency-properties,Wpf,Dependency Properties,为什么要以这种方式创建DependencyProperty成员: public static readonly DependencyProperty DepProperty = DependencyProperty.Register(...); 而不是这样: protected static readonly DependencyProperty DepProp = DependencyProperty.Register(...); 当我们有CLR“包装器”时,为什么需要从外部使用DevPr

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

public static readonly DependencyProperty DepProperty = DependencyProperty.Register(...);
而不是这样:

protected static readonly DependencyProperty DepProp = DependencyProperty.Register(...);
当我们有CLR“包装器”时,为什么需要从外部使用DevProp成员:

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

依赖属性安全注意事项
依赖项属性应声明为公共属性。依赖项属性标识符字段应声明为公共静态字段。即使您试图声明其他访问级别(例如受保护),也始终可以通过标识符结合属性系统API访问依赖项属性。即使是受保护的标识符字段也可能是可访问的,因为元数据报告或值确定API是属性系统的一部分,例如。有关详细信息,请参阅


将它们公开为
public
并没有任何坏处,无论如何,我认为。

依赖项属性通常应该被认为是公共属性,可以被访问实例的任何调用方访问,或者至少可以被发现

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


感谢

除了给出的答案,请记住,在某些情况下,您确实需要访问DP本身。例如,
public static readonly dependencProperty Prop=Owner.Prop.AddOwner(typeof(thisClass),new FrameworkPropertyMetadata(Owner.Prop.DefaultMetadata.DefaultValue))public bool Dep
{
    get { return (bool)GetValue(DepProperty); }
    set { SetValue(DepProperty, value); }
}