C# 所有者类型不是DependencyObject的DependencyProperty有什么用?

C# 所有者类型不是DependencyObject的DependencyProperty有什么用?,c#,wpf,dependency-properties,dependencyobject,C#,Wpf,Dependency Properties,Dependencyobject,我刚刚开始在WPF中处理DependencyProperties,我想在处理它们时检查一些想法 给定以下条件(暂时忽略命名约定): 我发现dp2抛出了一个TypeInitializationException,其中包含消息“'MyTestClass'类型必须派生自DependencyObject”,这是我所期望的,但dp1被非常愉快地接受了 现在,我明白了为什么dp2会引发异常,因为我正试图在一个不是DependencyObject的类型上注册属性元数据,这很好。我已经在封面下看了看,可以看到d

我刚刚开始在WPF中处理DependencyProperties,我想在处理它们时检查一些想法

给定以下条件(暂时忽略命名约定):

我发现dp2抛出了一个TypeInitializationException,其中包含消息“'MyTestClass'类型必须派生自DependencyObject”,这是我所期望的,但dp1被非常愉快地接受了

现在,我明白了为什么dp2会引发异常,因为我正试图在一个不是DependencyObject的类型上注册属性元数据,这很好。我已经在封面下看了看,可以看到dp1和dp2都遵循的代码路径,所以我从代码的角度理解为什么dp1不会引发异常,但从概念上讲,我希望dp1和dp2都会引发相同的异常

我的问题是,创建像dp1这样的DependencyProperty有什么用,它的所有者类型不是DependencyObject,因为我看不出在DependencyObject上没有GetValue/SetValue方法的情况下如何使用它。

编辑
第一个寄存器签名的原因是注册一个
dependencProperty
,该属性没有可通过
Clear
-方法还原的默认值,也没有注册值更改回调


因为没有默认值,所以不会检查默认值是否有效,因此不会抛出异常。然而,这种登记是没有用的。您将不会从中受益,而且它不会抛出异常并不意味着它对某些事情有好处—它只是没有错。

您好,谢谢您的回复。我理解为什么ownerType可以设置为任何对象,并且检查是在运行时执行的。然而,我的问题是,为什么下面的代码不抛出运行时异常,因此以这种方式创建DependencyProperty有什么用:DependencyProperty.Register(“MyProp”、typeof(String)、typeof(MyTestClass))@马特:对不起,我本来会更准确地阅读这个问题的。我已经改变了我的答案。顺便说一句,问题是+1。你好,HCL。非常感谢您抽出时间阅读我的评论并再次回复。我非常感激。我想不出以这种方式注册dp1有什么有用的目的,但由于它没有抛出异常,我认为它一定有我不知道的目的。感谢您确认它没有任何用处。
class MyTestClass
{
    public static readonly DependencyProperty dp1 = DependencyProperty.Register("MyProp", typeof(String), typeof(MyTestClass));

    public static readonly DependencyProperty dp2 = DependencyProperty.Register("MyProp2", typeof(String), typeof(MyTestClass), new PropertyMetadata("Hello"));
}