예제 #1
0
파일: Fax.cs 프로젝트: giusi96/Accademy_10
        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)
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
        public Fax(MailManager mm)
        {
            this._mm = mm;
            MailManagerEventHandler del = new MailManagerEventHandler(mm_MailArrived);

            this._mm.MailArrived += del; // invoke add_MailArrived(del);
        }
예제 #5
0
        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()
        }
예제 #6
0
파일: Fax.cs 프로젝트: maril96/Accademy_10
        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;
        }
예제 #7
0
        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)
        }
예제 #8
0
        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);
                }
            }
        }