C# PropertyChangedCallback封装
这件事困扰了我一段时间,所以我问一位同事他是否能理解,现在我在这里 为什么可以在依赖属性的PropertyChangedCallback中访问保持类的私有成员? 让我通过这个例子进一步解释我的意思:C# PropertyChangedCallback封装,c#,wpf,callback,encapsulation,C#,Wpf,Callback,Encapsulation,这件事困扰了我一段时间,所以我问一位同事他是否能理解,现在我在这里 为什么可以在依赖属性的PropertyChangedCallback中访问保持类的私有成员? 让我通过这个例子进一步解释我的意思: /// <summary> /// Interaction logic for ZeControl.xaml /// </summary> public partial class ZeControl : UserControl {
/// <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.回调是在拥有私有成员的同一个类中定义的,这种访问没有问题。私有实例成员似乎是从外部访问的,但您仍然在同一个类中,这似乎有些奇怪。回调是在拥有私有成员的同一个类中定义的,这种访问没有错。看起来很奇怪,一个私有实例成员似乎是从外部访问的,但你仍然在同一个类中。该死,你每天都会学到一些东西。在两年的编程生涯中,我从未尝试过像这样访问私人会员。在这里,我认为这是一个依赖性属性,一个莫名其妙的魔法。我真傻。谢谢不客气!如果你想看一些非常奇怪的东西,那么看看:我以前读过那篇文章。好几次,直到我真正理解xD,但在与哨兵对象战斗后,我一直在留意我的爱恨好友WPF的怪异之处。该死,你每天都能学到东西。在两年的编程生涯中,我从未尝试过像这样访问私人会员。在这里,我认为这是一个依赖性属性,一个莫名其妙的魔法。我真傻。谢谢不客气!如果你想看一些非常奇怪的东西,那么看看:我以前读过那篇文章。好几次,直到我真正理解xD,但在与哨兵对象战斗后,我一直在留意我的爱恨好友WPF的怪异之处。