PropertyChangedCallback encapsulation - PullRequest
       6

PropertyChangedCallback encapsulation

1 голос
/ 10 февраля 2012

Меня это некоторое время беспокоило, поэтому я спросил коллегу, может ли он это понять, и теперь я здесь;)

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

С уважением,

баб.

1 Ответ

4 голосов
/ 10 февраля 2012

Обратный вызов определен в том же классе, который владеет закрытым членом, нет ничего плохого в таком доступе.Может показаться странным, что закрытый член экземпляра, по-видимому, доступен "извне", но вы все еще в том же классе.

...