Как вызвать события, определенные с помощью свойств события - PullRequest
4 голосов
/ 15 октября 2011

Я изучаю события и делегатов и начал с нескольких событий сейчас. Только то, что документы не предоставляют никакой информации или примера кода для инициирования событий, определенных таким образом. Ниже вы можете найти простой пример

Пример кода

public class Person
    {
        private string _name;
        private string _phone;

        public string Name
        {
            get { return _name; }
            set
            {
                _name = value;
            }
        }

        public string Phone
        {
            get { return _phone; }
            set
            {
                _phone = value;
            }
        }

        protected EventHandlerList EventDelegateCollection = new EventHandlerList();

        //define the event key
        static readonly object PhoneChangedEventKey = new object();
        public event EventHandler PhoneChanged
        {
            add
            {
                EventDelegateCollection.AddHandler(PhoneChangedEventKey, value);
            }
            remove
            {
                EventDelegateCollection.RemoveHandler(PhoneChangedEventKey, value);
            }
        }
    }

Я хотел бы поднять событие, когда номер телефона установлен. если что-то звучит странно и не понимаю, о чем я говорю см. здесь

Обновление

Я хотел бы прояснить некоторые сомнения здесь. Существует два способа подписки и вызова обработчиков событий классическим шаблоном (, как описано здесь ), где выполняются шаги

  • Определить делегат, который действует как подпись для подписанных методов.
  • Определить событие, которое делегирует
  • Определите метод, который вызывает обработчики note: метод выше создает поле для каждого события, следовательно, потребляет больше памяти ссылка

Событие недвижимости - это еще один способ, где вы делаете ниже

  • Определить объект, который действует как ключ к событию
  • Определить метод для добавления и удаления обработчиков для события из списка вызовов событий
  • Вызывать событие, определяя обработчики событий на основе ключа события

Ответы [ 2 ]

3 голосов
/ 15 октября 2011

Вот как на самом деле вы должны поднять его

код

public class Person
{
    private string _name;
    private string _phone;

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
        }
    }

    public string Phone
    {
        get { return _phone; }
        set
        {
            _phone = value;
            //Invoke the Handlers now
            OnPhoneChanged();
        }
    }

    protected EventHandlerList EventDelegateCollection = new EventHandlerList();
    static readonly object PhoneChangedEventKey = new object();
    public event EventHandler PhoneChanged
    {
        add
        {
            EventDelegateCollection.AddHandler(PhoneChangedEventKey, value);
        }
        remove
        {
            EventDelegateCollection.RemoveHandler(PhoneChangedEventKey, value);
        }
    }

    private void OnPhoneChanged()
    {
        EventHandler subscribedDelegates = (EventHandler)this.EventDelegateCollection[PhoneChangedEventKey];
        subscribedDelegates(this, EventArgs.Empty);
    }
}
0 голосов
/ 15 октября 2011

Предлагаю прочитать Делегаты и события на C # . Код ниже - то, что вы хотите.

public class Person
{
    public event EventHandler<string> PhoneNumberChanged;

    private string _name;
    private string _phone;

    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
        }
    }

    public string Phone
    {
        get { return _phone; }
        set
        {
            _phone = value;

            if (this.PhoneNumberChanged != null)
            {
                this.PhoneNumberChanged(this._phone);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...