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 #?

È stato utile?

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

Quando utilizzare. . .

Cosa sono le chiusure

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 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top