Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al C# - Delegati Parte II

Guida al C#

Capitolo 21° - Delegati Parte II

<< Precedente Prossimo >>

I delegati possono contenere, una lista interna di delegati ( chiamata invocation list ) che contiene delegati eventi la stessa firma, si parla in questi casi di Delegati Multicast.

QUando un delegato di questo tipo viene invocato esso a sua volta, invoca tutti i delegati presenti nella sua invocation list.

E possibile aggiungere, rimuovere delegati da una invocation list, utilizzando gli operatori di overload += e -=

 

andiamo con l'esaminare di un nuovo esempio.
sfruttando anche il delegato nel capitolo precedente creato.

 class Program
    {
        public delegate void Delegato(string Messaggio);

        static void CreaFile(string linea)
        {
            System.IO.StreamWriter ws = new System.IO.StreamWriter(@"C:\test.txt");
            ws.WriteLine(linea);
            ws.Close();

        }

        static void Messaggio(string msg) { Console.WriteLine(msg); Console.ReadKey(); }

        static void Main(string[] args)
        {
            Delegato dt = new Delegato(Messaggio);
            dt += new Delegato(CreaFile);
            dt("ciao delegato :)");
        }
      
    }
 

 

 

In questo modo abbiamo creato un Multicast per il delegato corrente.
Ovvero?

Significa che se nel precedente capitolo, abbiamo incapsulato nel Delegato la funzione Void Messaggio,
e inviato un semplice parametro.
In questo caso il parametro inviato equivale per 2 funzioni.

Un'altro esempio più comprensibile riguardo all'uso dei delegati.

ho creato questa semplice funzione per farvi capire l'idea precisa del Multicast di un delegato.

 

 

public delegate int CalcoloCircolare(int Numero);

        static int Addizione(int numero) { int tot = numero + numero; Console.WriteLine(numero + " + " + numero + " = " + tot); return 0; }
        static int Sottrazione(int numero) { int tot = numero - numero; Console.WriteLine(numero + " - " + numero + " = " + tot); return 0; }
        static int Moltiplicazione(int numero) { int tot = numero * numero; Console.WriteLine(numero + " * " + numero + " = " + tot); return 0; }
        static int Divisione(int numero) { int tot = numero / numero; Console.WriteLine(numero + " / " + numero + " = " + tot); return 0; }


        static void Main(string[] args)
        {
            Console.WriteLine("Inserisci un numero da calcolare ciclicamente");
            int n = Convert.ToInt16(Console.ReadLine());

            //inizializzazione
            CalcoloCircolare cq = new CalcoloCircolare(inserisci);

            cq += new CalcoloCircolare(Addizione);
            cq += new CalcoloCircolare(Sottrazione);
            cq += new CalcoloCircolare(Moltiplicazione);
            cq += new CalcoloCircolare(Divisione);

            cq(n);

            Console.ReadKey();
            Console.ReadKey();
        }

        static int inserisci(int numero)
        {

            return numero;
        }

 

 

 

 


Oltre a mostrarci sulla console, il messaggio passato per argomento, Ci creerà anche un file di testo
Contenente l'argomento inviato al delegato. 

I delegati, d'altra parte sono maggiormente utili per scopi come Thread, anonymous method, programmazione asincrona e sopratutto eventi.

Nei successivi capitoli useremo appunto i delegati con blocchi di codici che spiegherò come gestire i Thread.
Eventi,Monitor, ThreadPool ed Eccezzioni. 

 

 

 


<< Precedente Prossimo >>
A proposito dell'autore

VB.NET, C#, C++, PHP, MySQL, Javascript , LUA,Infarinatura di Python e Ruby, Grafica Vettoriale (Esperto di CorelDraw) DirectX 9 e XNA Game Studio, Silverlight, jquery, Autoit e Android. Esperto in Unity e Buona conoscenza di Blender. Esperto C# UI Designer Ottima conoscenza sulle tecnologie PBR. Assembly? Sto imparando...