Меня это некоторое время беспокоило, поэтому я спросил коллегу, может ли он это понять, и теперь я здесь;)
Почему вы можете получить доступ к закрытым членам класса владения в 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, что делало мои приложения несовместимыми.
С уважением,
баб.