Come vengono utilizzati e creati i delegati definiti dall'utente in C #?
Domanda
Ho usato i delegati durante la progettazione di moduli vincenti in .NET ... ovvero trascina / rilascia un pulsante, fai doppio clic e compila l'evento myButton_click. Voglio capire come creare e utilizzare i delegati definiti dall'utente in C #.
Come vengono utilizzati e creati i delegati definiti dall'utente in C #?
Soluzione
Suggerisco di leggere un tutorial sull'argomento.
Fondamentalmente, dichiari un tipo delegato:
public delegate void MyDelegate(string message);
Quindi puoi assegnarlo e chiamarlo direttamente:
MyDelegate = SomeFunction;
MyDelegate("Hello, bunny");
Oppure crei un evento:
public event MyDelegate MyEvent;
Quindi puoi aggiungere un gestore di eventi dall'esterno in questo modo:
SomeObject.MyEvent += SomeFunction;
Visual Studio è utile in questo. Dopo aver inserito + =, basta premere tab-tab e creerà il gestore per te.
Quindi puoi attivare l'evento dall'interno dell'oggetto:
if (MyEvent != null) {
MyEvent("Hello, bunny");
}
Questo è l'uso di base.
Altri suggerimenti
public delegate void testDelegate(string s, int i);
private void callDelegate()
{
testDelegate td = new testDelegate(Test);
td.Invoke("my text", 1);
}
private void Test(string s, int i)
{
Console.WriteLine(s);
Console.WriteLine(i.ToString());
}
Non proprio un duplicato (non riesco a trovare un duplicato) ma molte informazioni qui su SO, prova
Differenza tra eventi e delegati per ottenere iniziato, quindi guarda
Che sta facendo questo delegato . . .
Spero che questi aiuti
Per una risposta ampia, consulta questo articolo di mohamad halabi . Per una risposta più breve controlla questo esempio leggermente modificato dalla cartella c: / Programmi / Microsoft Visual Studio 9.0 / Samples / 1033 / ...
using System;
using System.IO;
namespace DelegateExample
{
class Program
{
public delegate void PrintDelegate ( string s );
public static void Main ()
{
PrintDelegate delFileWriter = new PrintDelegate ( PrintFoFile );
PrintDelegate delConsoleWriter = new PrintDelegate ( PrintToConsole);
Console.WriteLine ( "PRINT FIRST TO FILE by passing the print delegate -- DisplayMethod ( delFileWriter )" );
DisplayMethod ( delFileWriter ); //prints to file
Console.WriteLine ( "PRINT SECOND TO CONSOLE by passing the print delegate -- DisplayMethod ( delConsoleWriter )" );
DisplayMethod ( delConsoleWriter ); //prints to the console
Console.WriteLine ( "Press enter to exit" );
Console.ReadLine ();
}
static void PrintFoFile ( string s )
{
StreamWriter objStreamWriter = File.CreateText( AppDomain.CurrentDomain.BaseDirectory.ToString() + "file.txt" );
objStreamWriter.WriteLine ( s );
objStreamWriter.Flush ();
objStreamWriter.Close ();
}
public static void DisplayMethod ( PrintDelegate delPrintingMethod )
{
delPrintingMethod( "The stuff to print regardless of where it will go to" ) ;
}
static void PrintToConsole ( string s )
{
Console.WriteLine ( s );
} //eof method
} //eof classs
} //eof namespace