private MailManager _mm; //proprietà di solo lettura di Fax public Fax(MailManager mm) { this._mm = mm; MailManagerEventHandler del = new MailManagerEventHandler(mm_MailArrived); //costruzione del delegate this._mm.MailArrived += del; //invoco add_MailArrived(del) }
public void SimulateMailArrived(string from, string to, string subject, string body) { MailEventArgs args = new MailEventArgs() { Body = body, From = from, Subject = subject, To = to }; if (MailArrived != null) { //MailArrived è null se nessuno si è sottoscritto, però poi nel foreach vado a tirarmi fuori la lista di Delegate esplicitamente //tramite le apposite funzioni foreach (Delegate item in MailArrived.GetInvocationList().ToList()) { //GetInvocationList() restituisce un'array di Delegates, che poi viene trasformato in una lista con il ToList() //Questo array contiene tutti i subscribers MailManagerEventHandler mm_eh = (MailManagerEventHandler)item; //riesco ad invocare il metodo attraverso il suo puntatore. Castando al Delegate specifico riesco a vedere esattamente che segnatura deve avere mm_eh. mm_eh(this, args); //il primo argomento è chi ha sollevato l'evento, che è proprio MailManager //qui invoco di volta in volta il metodo incapsulato dentro al delegate } // Avremmo potuto scrivere solo: MailArrived(this, args); } //O avremmo potuto scrivere tutto l'if come: MailArrived?.Invoke(this,args); }
public void SimulateMailArrived(string from, string to, string obj, string body) { MailEvevenArgs args = new MailEvevenArgs() { Body = body, From = from, To = to, obj = obj }; ////primometodo //MailArrived?.Invoke(this, args); ////metodo //if (MailArrived != null) //{ // MailArrived(this, args); //} //metodo esplicito if (MailArrived != null) { foreach (var item in MailArrived.GetInvocationList().ToList()) { MailManagerEventHandler mm_eh = (MailManagerEventHandler)item; mm_eh(this, args); } } }
public Fax(MailManager mm) { this._mm = mm; MailManagerEventHandler del = new MailManagerEventHandler(mm_MailArrived); this._mm.MailArrived += del; // invoke add_MailArrived(del); }
private MailManager _mm; // dichiaro istanza di mail manager che qui è puntatore vuoto (istanza nulla del notifier) public Fax(MailManager mm) // qui poi mm è un puntatore a un'istanza vera { this._mm = mm; MailManagerEventHandler del = new MailManagerEventHandler(mm_MailArrived); this._mm.MailArrived += del; // invoco add_MailArrived() }
public Fax(MailManager mm) { //qui gli passo un'istanza di MailManager, che sarà la stessa che passerò sia a Fax che a Printer. this.mm = mm; //questo sarebbe l'"InitializeComponents" della Form //Così il Fax ha un riferimento a MailManager; poi si costruisce il metodo proprio di Fax, //e lo si mette dentro ad un delegate, il quale viene accodato alla lista dei Delegate dell'evento MailArrived di MailManager //tramite il += (che invoca Add_MailArrived, metodo generato dall'evento per aggiungere Delegate alla lista). MailManagerEventHandler del = new MailManagerEventHandler(mm_MailArrived); this.mm.MailArrived += del; }
public void SimulateMailArrived(string from, string to, string subject, string body) // simulazione di sollevamento evento { MailEventArgs args = new MailEventArgs() // li ho creati nella classe delegatestuff per comodita { Body = body, From = from, Subject = subject, To = to }; // devo sollevare l'evento, quindo scorrere la lista dei delegate if (MailArrived != null) // se qualcuno si è sottoscritto { foreach (var item in MailArrived.GetInvocationList().ToList()) { MailManagerEventHandler mm_eh = (MailManagerEventHandler)item; // downcast per non avere un delegate generico mm_eh(this, args); //uso il puntatore come metodo, metto this perchè sono io che sollevo l'evento e ci passo gli argomenit } } // analogo di tutto quello che ho nell'if è MailArrived(this, args) o MailArrived?.Invoce(this, args) }
public void SimulateMailArrived(string from, string to, string subject, string body) { MailEventArgs args = new MailEventArgs() { Body = body, From = from, Subject = subject, To = to }; #region altri modi di invocare la invocation list /* * // primo metodo * MailArrived?.Invoke(this, args); * * * // secondo metodo * if (MailArrived != null) * { * MailArrived(this, args); * } */ #endregion // metodo esplicito if (MailArrived != null) { // Rise Event!!!!!!!!!! foreach (var item in MailArrived.GetInvocationList()) { MailManagerEventHandler mm_eh = (MailManagerEventHandler)item; mm_eh(this, args); } } }