1

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

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

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

DependencyObject.SetValue(TargetProperty,NewValue);

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

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

我的问题是使用任何一种方法而不是另一种方法的原因是什么。与说大量的 SetValue/GetValue 查找等相比,投射会更多地消耗资源吗?我将在方法中最多引用属性 10 次。

非常感谢。

4

1 回答 1

1

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

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

另一方面,如果您希望代码更像 C# 并遵循普通的属性访问器惯用语,则转换为正确的类型然后直接设置属性将更具可读性和可维护性。是的,它添加了额外的转换操作,然后调用属性设置器。但这些都是微不足道的成本,实际上是无法估量的。作为回报,您将获得不假定该属性的任何特定实现的代码。

于 2016-06-01T02:28:54.903 回答