Hier werde ich Delegaten, Multicast-Delegaten und ihre Verwendung erläutern. Delegat ist ein Typ, der die Methodenreferenz (en) in einem Objekt enthält. Es wird auch als typsicherer Funktionszeiger bezeichnet. Wir können sagen, ein Delegat ist ein Typ, der eine Methodensignatur definiert.
Wenn Sie einen Delegaten instanziieren, können Sie seine Instanz jeder Methode mit einer kompatiblen Signatur zuordnen. Sie können die Methode über die Delegateninstanz aufrufen (oder aufrufen). Delegaten werden verwendet, um Methoden als Argumente an andere Methoden zu übergeben. Ereignishandler sind nichts anderes als Methoden, die über Delegaten aufgerufen werden. Die Verwendung von Delegaten bietet folgende Vorteile: Kapselung des Methodenaufrufs vom Aufrufer Die effektive Verwendung von Delegaten verbessert die Leistung der Anwendung. Wird zum asynchronen Aufrufen einer Methode verwendet. Es gibt einige Eigenschaften von Delegierten
Delegates are like C++ function pointers but are type safe.
Delegates allow methods to be passed as parameters.
Delegates can be used to define callback methods.
Delegates can be chained together; for example, multiple methods can be called on a single event.
Methods do not have to match the delegate signature exactly.
öffentlicher Delegat type_of_delegate delegate_name () // Deklaration
You can use delegates without parameters or with parameter list
If you are referring to the method with some data type then the delegate which you are declaring should be in the same format. This is why it is referred to as type safe function pointer. Here I am giving an example with String.
Das folgende Beispiel zeigt eine Delegierungsoperation:
namespace MyDelegate
{
class Program
{
private delegate void Show(string s);
// Create a method for a delegate.
public static void MyDelegateMethod(string me
ssage)
{
System.Console.WriteLine(message);
}
static void Main(string[] args)
{
Show p = MyDelegateMethod;
p("My Delegate");
p.Invoke("My Delegate");
System.Console.ReadLine();
}
}
}
Was ist ein Multicast-Delegierter?
Es ist ein Delegat, der die Referenz von mehr als einer Methode enthält. Multicast-Delegaten dürfen nur Methoden enthalten, die void zurückgeben, andernfalls gibt es eine Laufzeitausnahme.
delegate void MyMulticastDelegate(int i, string s);
Class Class2
{
static void MyFirstDelegateMethod(int i, string s)
{
Console.WriteLine("My First Method");
}
static void MySecondDelegateMethod(int i, string s)
{
Console.WriteLine("My Second Method");
}
static void Main(string[] args)
{
MyMulticastDelegate Method= new MyMulticastDelegate(MyFirstDelegateMethod);
Method+= new MyMulticastDelegate (MySecondDelegateMethod);
Method(1,"Hi"); // Calling 2 Methodscalled
Method-= new MyMulticastDelegate (MyFirstDelegateMethod);
Method(2,"Hi"); //Only 2nd Method calling
}
}
Hier wird Delegate mit dem Operator + = hinzugefügt und mit dem Operator - = entfernt.
Delegatentypen werden von der Delegate-Klasse in .NET Framework abgeleitet. Delegatentypen sind versiegelt - sie können nicht abgeleitet werden. Da der instanziierte Delegat ein Objekt ist, kann er als Parameter übergeben oder einer Eigenschaft zugewiesen werden. Auf diese Weise kann eine Methode einen Delegaten als Parameter akzeptieren und den Delegaten zu einem späteren Zeitpunkt aufrufen. Dies wird als asynchroner Rückruf bezeichnet.