Latest web development tutorials

C # Delegierter (Delegierter)

C # Principal (Delegierter) ähnlich zu C oder C ++ Funktionszeiger.Principal (Delegierter) gibt es ein Verfahren für ein Referenz - Typ Variablenreferenzen.Referenz kann zur Laufzeit geändert werden.

Principal (Delegierter), die speziell für Veranstaltungen und Callback-Methoden bestimmt. Alle Delegierten (Delegierter) ausSystem.Delegate Klasse abgeleitet.

Erklärung der Kommission (Delegierter)

Proxy-Anweisung bestimmt das Verfahren durch den Delegierten verwiesen werden kann. Stellvertretung kann sich auf ein Verfahren weisen das gleiche Label hat.

Zum Beispiel: Angenommen, Sie haben einen Delegierten:

public delegate int MyDelegate (string s);

Die obige Kommission kann auf jedes Verfahren zu verweisen verwendet werden , die einen einzelnenStringParameter und gibt einenint- Typ Variable.

Die Syntax für die Deklaration in Auftrag gegeben, wie folgt:

Delegierte <return type> <Delegat-name> <Parameterliste>

Beispiele für die Kommission (Delegierter)

Sobald ein Delegate - Typ deklariert, Delegierter Objekt muss dasneue Schlüsselwort verwenden , um zu erstellen, und mit einem bestimmten Verfahren.Wenn Sie einen Delegaten Parameter auf dieneue Anweisung als Methodenaufruf, wie das Schreiben übergeben schaffen, aber keine Argumente.Zum Beispiel:

public delegate void printString (string s);
...
printString ps1 = new printString (WriteToScreen);
printString ps2 = new printString (WriteToFile);

Das folgende Beispiel die Erklärung der Kommission zeigt, instanziiert und der Verwendung kann der Delegat verwendet werden Verfahren mit einem ganzzahligen Argument zu verweisen und gibt einen ganzzahligen Wert.

using System;

delegieren int NumberChanger (int n);
Namespace DelegateAppl
{
   Klasse TestDelegate
   {
      static int num = 10;
      public static int AddNum (int p)
      {
         num + = p;
         Rückkehr num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         Rückkehr num;
      }
      public static int getNum ()
      {
         Rückkehr num;
      }

      static void Main (string [] args)
      {
         // Eine Delegatinstanz NumberChanger NC1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         // Rufen Sie die Methode unter Verwendung eines Delegatobjekt NC1 (25);
         Console.WriteLine ( "Wert des Num: {0}", getNum ());
         NC2 (5);
         Console.WriteLine ( "Wert des Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Wert von Num: 35
Wert von Num: 175

Im Auftrag Multicast (Multicast eines Delegierten)

Delegate-Objekt kann das "+" Operator verwenden, zu fusionieren. Ein Delegierter zu nennen es zwei Delegierte verschmelzen zu verschmelzen. Nur so kann die gleiche Art von Vertrauen kombiniert werden. "-" Operator kann verwendet werden, um die Komponente aus dem kombinierten Delegierten Delegierte zu entfernen.

Verwenden Sie diese nützliche Funktion in Auftrag gegeben, können Sie eine Liste von Delegaten ruft die Methode, wenn es aufgerufen wird, aufzurufen. Dies wird delegiertMulticast (Multicast) genannt, die auch als Multicasting bekannt.Das folgende Programm zeigt eine Multicastdelegat:

using System;

delegieren int NumberChanger (int n);
Namespace DelegateAppl
{
   Klasse TestDelegate
   {
      static int num = 10;
      public static int AddNum (int p)
      {
         num + = p;
         Rückkehr num;
      }

      public static int MultNum (int q)
      {
         num * = q;
         Rückkehr num;
      }
      public static int getNum ()
      {
         Rückkehr num;
      }

      static void Main (string [] args)
      {
         // Eine Delegatinstanz NumberChanger nc;
         NumberChanger NC1 = new NumberChanger (AddNum);
         NumberChanger NC2 = new NumberChanger (MultNum);
         nc = NC1;
         nc + = NC2;
         // Aufruf Multicast-nc (5);
         Console.WriteLine ( "Wert des Num: {0}", getNum ());
         Console.ReadKey ();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Wert von Num: 75

Principal (Delegierter) Anwendungen

Das folgende Beispiel demonstriert die Verwendung der Delegation. HauptprintStringverwendet werden Methode mit einem String als Eingabe zu verweisen und gibt nichts zurück.

Wir verwenden diese Delegierten die beiden Methoden zu nennen, die erste Saite auf der Konsole ausgegeben, und die zweite Zeichenfolge in eine Datei zu drucken:

using System;
using System.IO;

Namespace DelegateAppl
{
   Klasse PrintString
   {
      statische Filestream fs;
      statische Stream sw;
      // Proxy Statement public delegate void printString (string s);

      // Diese Methode druckt auf der Konsole public static void WriteToScreen (string str)
      {
         Console.WriteLine ( "Der String ist: {0}", str);
      }
      // Diese Methode druckt public static void WriteToFile (string s) in Datei
      {
         fs = new Filestream ( "c: \\ message.txt",
         FileMode.APPEND, FileAccess.Write);
         sw = new Stream (fs);
         sw.WriteLine (s);
         sw.Flush ();
         sw.Close ();
         fs.Close ();
      }
      // Diese Methode der Delegierte als Parameter, und es verwenden, die Methode public static void Sendstring (printString ps) zu nennen
      {
         ps ( "Hallo Welt");
      }
      static void Main (string [] args)
      {
         printString ps1 = new printString (WriteToScreen);
         printString ps2 = new printString (WriteToFile);
         Sendstring (PS1);
         Sendstring (ps2);
         Console.ReadKey ();
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

Der String ist: Hallo Welt