none
как данная конструкция помогает контролировать подписку на события? RRS feed

  • Вопрос

  • всем привет, сейчас прохожу курс по c#. где столкнулся вот с таким примером:

    public class MyClass
         {
            EventDelegate myEvent = null;
    
            // Реализация методов доступа add и remove для события.
            public event EventDelegate MyEvent
            {
                add { myEvent += value; }
                remove { myEvent -= value; }
            }
    
            public void InvokeEvent()
            {
                myEvent.Invoke();
            }
        }
    
        class Program
        {
            // Методы обработчики события.
    
            static private void Handler1()
            {
                Console.WriteLine("Обработчик события 1");
            }
    
            static private void Handler2()
            {
                Console.WriteLine("Обработчик события 2");
            }
    
            static void Main()
            {
                MyClass instance = new MyClass();
    
                // Подписка на событие.
                instance.MyEvent += new EventDelegate(Handler1);
                instance.MyEvent += new EventDelegate(Handler2);
    
                // Метод который вызывает событие.
                instance.InvokeEvent();
    
                Console.WriteLine(new string('-', 20));
    
                // Открепляем Handler2().
                instance.MyEvent -= new EventDelegate(Handler2);
                instance.InvokeEvent();
    
                // Delay.
                Console.ReadKey();
            }
        }

    до этого был точно такой же пример, но в этом автор курса как бы демонстрирует явную реализацию свойства и методов доступа add и remove, и говорит такую странную фразу:

    "методы add и remove помогают нам проконтролировать подписку/ отписку обработчиков событий" - каким это образом явная реализация этих методов доступа помогает именно контролировать подписку/ отписку ? - ведь компилятор по сути генерирует тоже самое если мы этого не пропишем явно. Т.е меня напрягает именно фраза "помогает проконтролировать"

    2 августа 2016 г. 8:17

Ответы

  • Здравствуйте. "Помогает проконтролировать" означает, что Вы вправе написать дополнительный код кроме myEvent += value в add и myEvent -= value в remove. Здесь, по сути, то же различие, как между полем и свойством. При взаимодействии с полем Вы общаетесь непосредственно с областью памяти (читаете или пишите туда), а свойство позволяет выполнить произвольный код во время запроса или задания его значения.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    2 августа 2016 г. 18:44