Электрон Внешний контент / нпм

Вы можете получить доступ только к событию в объявляющем классе, поскольку .NET создает частные переменные экземпляра за кулисами, которые фактически удерживают делегата. Выполнение этого.

public event EventHandler MyPropertyChanged;

на самом деле делает это:

private EventHandler myPropertyChangedDelegate;

public event EventHandler MyPropertyChanged
{
    add { myPropertyChangedDelegate += value; }
    remove { myPropertyChangedDelegate -= value; }
}

и делает это ...

MyPropertyChanged(this, EventArgs.Empty);

на самом деле это .. .

myPropertyChangedDelegate(this, EventArgs.Empty);

Таким образом, вы можете (очевидно) получить доступ только к переменной экземпляра частного делегата из класса объявления.

Соглашение должно предоставить что-то подобное в объявляющем классе. .

protected virtual void OnMyPropertyChanged(EventArgs e)
{
    EventHandler invoker = MyPropertyChanged;

    if(invoker != null) invoker(this, e);
}

Вы можете вызвать OnMyPropertyChanged(EventArgs.Empty) из любого места этого класса или ниже иерархии наследования для вызова события.

1
задан nyoung 19 March 2019 в 15:15
поделиться