我有一个属性更改的回调,我需要在其中执行一些验证。
我将采用一个新值,并根据一组其他属性条件(如最小值和最大值)对其进行验证。
为此,我计划从更改的事件中获取依赖项对象并使用
DependencyObject.SetValue(TargetProperty,NewValue);
或将其强制转换为变量并直接使用属性
ObjectType myObjectType = (ObjectType)DependencyObject;
myObjectType.Target=NewValue;
我的问题是使用任何一种方法而不是另一种方法的原因是什么。转换会比大量的 SetValue/GetValue 查找等更消耗资源吗?我将在方法中引用多达 10 次属性。
非常感谢。
DependencyObject
中依赖属性的标准实现是调用SetValue()
。此外,铸造非常便宜,尤其是在这种情况下。因此,这两种方法之间实际上没有实际区别。
对我来说,这将归结为你想专注于操作的哪一部分。如果您希望您的实现与对象实际上是DependencyObject
这一事实紧密相关,我看不出有什么理由避免直接调用SetValue()
。这就是 WPF 所做的。
另一方面,如果您希望代码更像 C# 并遵循普通的属性访问器习惯用法,则强制转换为正确的类型,然后直接设置属性将更具可读性和可维护性。是的,它添加了强制转换然后调用属性 setter 的额外操作。但这些成本可以忽略不计,几乎无法估量。作为回报,您将获得不假定属性的任何特定实现的代码。