【问题标题】:DependencyObject.SetValue vs cast and set propertyDependencyObject.SetValue 与强制转换和设置属性
【发布时间】:2016-09-29 20:17:51
【问题描述】:

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

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

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

DependencyObject.SetValue(TargetProperty,NewValue);

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

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

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

非常感谢。

【问题讨论】:

  • 我会去this MS link 看看关于 DP 以及如何编写它们的信息。我看不出有任何理由像你那样写它们......

标签: c# casting dependency-properties dependencyobject


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多