DependencyObjects可以使用SetValue(),并且大多数(如果不是全部)现有的UIElement派生控件都包含可以通过SetValue设置的DependencyObject属性。有时,在WPF应用程序中执行代码隐藏是很实用的。下面会产生类似的结果。但是哪一个更好呢?
<TextBlock x:Name="myTextBlock" Loaded="myTextBlock_Loaded"/>设置Text属性可以通过两种方式完成。
myTextBlock.Text = "foo";或
myTextBlock.SetValue(TextBlock.TextProperty, "foo");也许差别是微不足道的,但我很好奇使用其中一个是否比使用另一个有优势。
发布于 2015-11-05 11:15:55
在第二个版本中,由于TextBlock.Text set的实现实际上是return this.SetValue(TextBlock.TextProperty, value);,所以性能略有提升。
但是,应该注意的是,第二个实现有可能出错,例如,您最终可能会键入
myTextBlock.SetValue(Grid.ColumnProperty, "foo");它可以编译,但很可能不会运行(或者至少不会给出预期的结果)。
此外,前者将为您提供后者不能提供的类型安全性。
*“这个性能提升”应该是JITed远离。
发布于 2015-11-05 11:29:13
具有实际属性的依赖属性本质上是通过代码获取或设置这些属性的便利。所有依赖项对象的所有依赖项属性都由键/值的“字典”支持。这些值是通过GetValue()和SetValue()方法访问的。
什么是“更好的”完全取决于您打算如何使用这些属性。所有内置控件都定义属性,以便更容易通过代码初始化对象。如果您使用Get/Set方法尝试相同的方法,则会混乱得多。
但是不要从什么是“更好”的角度来看待它,你这样想是行不通的。两者都是必要的。依赖属性是获取/设置依赖对象的可观察属性的方式。通过相应的属性来访问这些属性,可以更轻松地使用您的代码。
如果您不需要通过代码访问这些依赖属性,那么我想您可能会认为这些属性是不需要的,但是没有人会想要使用它。
https://stackoverflow.com/questions/33535895
复制相似问题