DependencyObject.SetValue vs 转换和设置 属性

DependencyObject.SetValue vs cast and set property

我有一个 属性 更改的回调,我需要在其中执行一些验证。

我将采用一个新值并根据一组其他 属性 标准(例如最小值和最大值)对其进行验证。

为此,我计划从更改的事件中获取依赖对象并使用

DependencyObject.SetValue(TargetProperty,NewValue);

或将其转换为变量并直接使用属性

ObjectType myObjectType = (ObjectType)DependencyObject;
myObjectType.Target=NewValue;

我的问题是使用其中一种方法而不是另一种方法的原因是什么。转换会比说很多 SetValue/GetValue 查找等更耗费资源吗?我将在方法中引用属性多达 10 次。

非常感谢。

DependencyObject 中依赖项 属性 的标准实现是调用 SetValue()。此外,铸造非常便宜,尤其是在这种情况下。所以这两种方法之间确实没有实际区别。

对我来说,这将归结为您希望专注于操作的哪一部分。如果您希望您的实现与对象实际上是 DependencyObject 这一事实紧密相关,我看不出有太多理由避免直接调用 SetValue()。这就是 WPF 所做的。

另一方面,如果您希望代码更像 C# 并遵循正常的 属性 访问器习语,则转换为正确的类型然后直接设置 属性 会更容易可读和可维护。是的,它添加了转换然后调用 属性 setter 的额外操作。但这些都是微不足道的成本,几乎无法估量。在 return 中,您得到的代码不假定 属性.

的任何特定实现