Latest web development tutorials

C # delegato (Delegato)

C # Principal (delegato) simile a C o C ++ puntatore a funzione.Principal (Delegato) c'è un metodo per un tipo di riferimento riferimenti variabili.Riferimento può essere modificato in fase di esecuzione.

Principal (delegato) specificamente destinata per eventi e metodi di callback. Tutti delegato (delegato) sono derivati dalla classeSystem.Delegate.

Dichiarazione della Commissione (Delegato)

dichiarazione di delega determina il metodo può essere referenziato dal delegato. Delegato può indicare un procedimento avente la stessa etichetta.

Ad esempio, si supponga di avere un delegato:

Delegato pubblico int MyDelegate (string s);

La commissione di cui sopra può essere utilizzato per riferirsi a qualsiasi metodo che accetta un unico parametro distringae restituisce una variabile di tipoint.

La sintassi di dichiarazione commissionata come segue:

delegato <tipo di ritorno> <delegato-name> <lista di parametri>

Esempi della Commissione (delegato)

Una volta dichiarato un tipo di delegato, oggetto delegato deve utilizzare lanuova parola chiave per creare, e con un particolare metodo.Quando si crea un parametro delegato passato allanuova istruzione come una chiamata di metodo, come la scrittura, ma senza argomenti.Ad esempio:

Delegato pubblico PrintString void (string s);
...
PrintString PS1 = new PrintString (WriteToScreen);
PrintString ps2 = new PrintString (WriteToFile);

L'esempio seguente mostra la dichiarazione della Commissione, istanziare e utilizzare, il delegato può essere utilizzato per metodo di riferimento con un argomento intero e restituisce un valore intero.

using System;

delegare int NumberChanger (int n);
DelegateAppl namespace
{
   classe TestDelegate
   {
      int num statica = 10;
      public static int AddNum (int p)
      {
         num + = p;
         tornare num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         tornare num;
      }
      int public static getNum ()
      {
         tornare num;
      }

      static void Main (string [] args)
      {
         // Crea un'istanza delegato NumberChanger NC1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         // Chiamare il metodo mediante un NC1 oggetto delegato (25);
         Console.WriteLine ( "Valore di Num: {0}", getNum ());
         NC2 (5);
         Console.WriteLine ( "Valore di Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Valore di Num: 35
Valore di Num: 175

multicast Commissionato (multicasting di un delegato)

oggetto delegato può usare l'operatore "+" per unire. Un delegato chiamarlo unire unire due delegati. Solo lo stesso tipo di fiducia può essere combinato. "-" Operatore può essere utilizzato per rimuovere il componente dal delegato delegato combinato.

Utilizzare questa caratteristica utile commissionato, è possibile creare una lista di delegato chiama il metodo quando viene chiamato per invocare. Questo si chiamamulticast delegato (multicast),noto anche come il multicasting. Il seguente programma dimostra un delegato multicast:

using System;

delegare int NumberChanger (int n);
DelegateAppl namespace
{
   classe TestDelegate
   {
      int num statica = 10;
      public static int AddNum (int p)
      {
         num + = p;
         tornare num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         tornare num;
      }
      int public static getNum ()
      {
         tornare num;
      }

      static void Main (string [] args)
      {
         // Crea un'istanza delegato NumberChanger nc;
         NumberChanger NC1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         nc = nc1;
         nc + = NC2;
         // Chiama nc multicast (5);
         Console.WriteLine ( "Valore di Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

Valore di Num: 75

Principal (delegato) usi

L'esempio seguente mostra l'utilizzo della delega.PrintStringPrincipal essere utilizzato per metodo di riferimento con una stringa come input e non restituisce nulla.

Usiamo questo delegato per chiamare i due metodi, la prima stringa stampata sulla console, e la seconda stringa da stampare su un file:

using System;
using System.IO;

DelegateAppl namespace
{
   classe PrintString
   {
      fs FileStream statiche;
      StreamWriter sw statica;
      // Dichiarazione di delega delegato public void PrintString (string s);

      // Questo metodo stampa alla console WriteToScreen public static void (stringa str)
      {
         Console.WriteLine ( "La stringa è: {0}", str);
      }
      // Questo metodo stampa su file WriteToFile public static void (string s)
      {
         fs = new FileStream ( "c: \\ Message.txt",
         FileMode.APPEND, FileAccess.Write);
         sw = new StreamWriter (FS);
         sw.WriteLine (s);
         sw.Flush ();
         sw.Close ();
         fs.Close ();
      }
      // Questo metodo il delegato come parametro, e utilizzarlo per chiamare il metodo SendString public static void (PrintString ps)
      {
         ps ( "Ciao Mondo");
      }
      static void Main (string [] args)
      {
         PrintString PS1 = new PrintString (WriteToScreen);
         PrintString ps2 = new PrintString (WriteToFile);
         SendString (PS1);
         SendString (PS2);
         Console.ReadKey ();
      }
   }
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

La stringa è: Ciao Mondo