首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DependencyObject SetValue vs属性访问器

DependencyObject SetValue vs属性访问器
EN

Stack Overflow用户
提问于 2015-11-05 10:56:22
回答 2查看 276关注 0票数 1

DependencyObjects可以使用SetValue(),并且大多数(如果不是全部)现有的UIElement派生控件都包含可以通过SetValue设置的DependencyObject属性。有时,在WPF应用程序中执行代码隐藏是很实用的。下面会产生类似的结果。但是哪一个更好呢?

代码语言:javascript
复制
<TextBlock x:Name="myTextBlock" Loaded="myTextBlock_Loaded"/>

设置Text属性可以通过两种方式完成。

代码语言:javascript
复制
myTextBlock.Text = "foo";

代码语言:javascript
复制
myTextBlock.SetValue(TextBlock.TextProperty, "foo");

也许差别是微不足道的,但我很好奇使用其中一个是否比使用另一个有优势。

EN

回答 2

Stack Overflow用户

发布于 2015-11-05 11:15:55

在第二个版本中,由于TextBlock.Text set的实现实际上是return this.SetValue(TextBlock.TextProperty, value);,所以性能略有提升。

但是,应该注意的是,第二个实现有可能出错,例如,您最终可能会键入

代码语言:javascript
复制
myTextBlock.SetValue(Grid.ColumnProperty, "foo");

它可以编译,但很可能不会运行(或者至少不会给出预期的结果)。

此外,前者将为您提供后者不能提供的类型安全性。

*“这个性能提升”应该是JITed远离。

票数 0
EN

Stack Overflow用户

发布于 2015-11-05 11:29:13

具有实际属性的依赖属性本质上是通过代码获取或设置这些属性的便利。所有依赖项对象的所有依赖项属性都由键/值的“字典”支持。这些值是通过GetValue()SetValue()方法访问的。

什么是“更好的”完全取决于您打算如何使用这些属性。所有内置控件都定义属性,以便更容易通过代码初始化对象。如果您使用Get/Set方法尝试相同的方法,则会混乱得多。

但是不要从什么是“更好”的角度来看待它,你这样想是行不通的。两者都是必要的。依赖属性是获取/设置依赖对象的可观察属性的方式。通过相应的属性来访问这些属性,可以更轻松地使用您的代码。

如果您不需要通过代码访问这些依赖属性,那么我想您可能会认为这些属性是不需要的,但是没有人会想要使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33535895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档