这一直困扰着我一段时间,所以我问同事他是否能够理解它,现在我在这里;)
为什么你可以在依赖属性的PropertyChangedCallback中访问持有类的私有成员?
让我通过这个例子进一步解释我的意思:
/// <summary>
/// Interaction logic for ZeControl.xaml
/// </summary>
public partial class ZeControl : UserControl
{
public ZeControl()
{
InitializeComponent();
}
private bool m_Trololo; //Please note that this field is PRIVATE!
#region Text
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
// Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(ZeControl), new UIPropertyMetadata(
new PropertyChangedCallback((dpo, dpce) =>
{
((ZeControl)dpo).m_Trololo = true; //How the hell?
//this.m_Trololo <-- would not compile, the callback is static.
})));
#endregion
}
这不是打破封装吗?它甚至如何编译?
我之所以这样问,主要是因为我在我的WPF应用程序中使用它:它允许我保持变量私有,同时仍然在回调中访问它。
但是因为它确实感觉不对,我不希望这在WPF vNext中“修复”,使我的应用程序不兼容。
致以最诚挚的问候,
BAB。
答案 0 :(得分:4)
回调是在拥有私有成员的同一个类中定义的,这种访问没有任何问题。私有实例成员看起来似乎是“从外部”访问,但你仍然在同一个类中,这似乎很奇怪。