Come iscriversi ad altri eventi di class in c #?

Uno scenario semplice: una class personalizzata che solleva un evento. Desidero consumare questo evento all’interno di un modulo e reactjs ad esso. Come lo faccio? Esempi di codice, per favore!

Si noti che il modulo e la class personalizzata sono classi separate.

public class EventThrower { public delegate void EventHandler(object sender, EventArgs args) ; public event EventHandler ThrowEvent = delegate{}; public void SomethingHappened() { ThrowEvent(this, new EventArgs()); } } public class EventSubscriber { private EventThrower _Thrower; public EventSubscriber() { _Thrower = new EventThrower(); //using lambda expression..could use method like other answers on here _Thrower.ThrowEvent += (sender, args) => { DoSomething(); }; } private void DoSomething() { //Handle event..... } } 

Dentro il tuo modulo:

 void SubscribeToEvent(OtherClass theInstance) { theInstance.SomeEvent += this.MyEventHandler; } void MyEventHandler(object sender, EventArgs args) { // Do something on the event } 

Devi solo iscriverti all’evento nell’altra class nello stesso modo in cui faresti per un evento nel tuo modulo. Le tre cose importanti da ricordare:

1) È necessario assicurarsi che il proprio metodo (gestore di eventi) abbia la dichiarazione appropriata per abbinarsi al tipo di delegato dell’evento sull’altra class.

2) L’evento dell’altra class deve essere visibile all’utente (es: pubblico o interno).

3) Iscriviti su un’istanza valida della class, non sulla class stessa.

Supponendo che il tuo evento sia gestito da EventHandler, questo codice funziona:

 protected void Page_Load(object sender, EventArgs e) { MyClass myObj = new MyClass(); myObj.MyEvent += new EventHandler(this.HandleCustomEvent); } private void HandleCustomEvent(object sender, EventArgs e) { //handle the event } 

Se il tuo “evento personalizzato” richiede qualche altra firma da gestire, dovrai invece usarlo.