Guida al C#
Capitolo 21° - Delegati Parte II
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. 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. Significa che se nel precedente capitolo, abbiamo incapsulato nel Delegato la funzione Void Messaggio, 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; }
I delegati, d'altra parte sono maggiormente utili per scopi come Thread, anonymous method, programmazione asincrona e sopratutto eventi.
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...
|