Delegate Klasse
TOC
Inhaltsverzeichnis reduzieren
Inhaltsverzeichnis erweitern
Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Delegate-Klasse

 

Stellt einen Delegaten dar. Hierbei handelt es sich um eine Datenstruktur, die auf eine statische Methode oder auf eine Klasseninstanz und eine Instanzenmethode dieser Klasse verweist.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)


[SerializableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
[ComVisibleAttribute(true)]
public abstract class Delegate : ICloneable, ISerializable

NameBeschreibung
System_CAPS_protmethodDelegate(Object, String)

Initialisiert einen Delegaten, der die angegebene Instanzenmethode für die angegebene Klasseninstanz aufruft.

System_CAPS_protmethodDelegate(Type, String)

Initialisiert einen Delegaten, der die angegebene statische Methode der angegebenen Klasse aufruft.

NameBeschreibung
System_CAPS_pubpropertyMethod

Ruft die Methode ab, die durch den Delegaten dargestellt wird.

System_CAPS_pubpropertyTarget

Ruft die Klasseninstanz ab, für die der aktuelle Delegat die Instanzenmethode aufruft.

NameBeschreibung
System_CAPS_pubmethodClone()

Erstellt eine flache Kopie des Delegaten.

System_CAPS_pubmethodSystem_CAPS_staticCombine(Delegate, Delegate)

Verkettet die Aufruflisten zweier Delegaten.

System_CAPS_pubmethodSystem_CAPS_staticCombine(Delegate[])

Verkettet die Aufruflisten eines Arrays von Delegaten.

System_CAPS_protmethodCombineImpl(Delegate)

Verkettet die Aufruflisten des angegebenen und des aktuellen Multicastdelegaten.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, MethodInfo)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode darstellen soll.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, MethodInfo, Boolean)

Erstellt einen Delegaten vom angegeben Typ zum Darstellen der angegebenen statischen Methode mit dem angegebenen Verhalten bei Bindungsfehlern.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, MethodInfo)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode oder Instanzmethode mit dem angegebenen ersten Argument darstellt.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, MethodInfo, Boolean)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode oder Instanzmethode mit dem angegebenen ersten Argument und dem angegebenen Verhalten bei Bindungsfehlern darstellt.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, String)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene Instanzenmethode darstellt, die für die angegebene Klasseninstanz aufgerufen werden soll.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, String, Boolean)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene Instanzenmethode darstellt, die für die angegebene Klasseninstanz aufgerufen werden soll, wobei die Groß- und Kleinschreibung den Angaben entsprechend berücksichtigt bzw. nicht berücksichtigt wird.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Object, String, Boolean, Boolean)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene Instanzenmethode darstellt, die für die angegebene Klasseninstanz aufgerufen werden soll, wobei die Groß- und Kleinschreibung und das Verhalten bei Bindungsfehlern den Angaben entsprechend berücksichtigt bzw. nicht berücksichtigt wird.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Type, String)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode der angegebenen Klasse darstellt.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Type, String, Boolean)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode der angegebenen Klasse mit der angegebenen Berücksichtigung von Groß- und Kleinschreibung darstellt.

System_CAPS_pubmethodSystem_CAPS_staticCreateDelegate(Type, Type, String, Boolean, Boolean)

Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode der angegebenen Klasse darstellt, wobei die Groß- und Kleinschreibung und das Verhalten bei Bindungsfehlern den Angaben entsprechend berücksichtigt bzw. nicht berücksichtigt wird.

System_CAPS_pubmethodDynamicInvoke(Object[])

Ruft die durch den aktuellen Delegaten dargestellte Methode dynamisch (mit später Bindung) auf.

System_CAPS_protmethodDynamicInvokeImpl(Object[])

Ruft die durch den aktuellen Delegaten dargestellte Methode dynamisch (mit später Bindung) auf.

System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt und der aktuelle Delegat vom gleichen Typ sind und die gleichen Ziele, Methoden und Aufruflisten besitzen.(Setzt "Object.Equals(Object)" außer Kraft.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von Object.)

System_CAPS_pubmethodGetHashCode()

Gibt einen Hashcode für den Delegaten zurück.(Setzt "Object.GetHashCode()" außer Kraft.)

System_CAPS_pubmethodGetInvocationList()

Gibt die Aufrufliste des Delegaten zurück.

System_CAPS_protmethodGetMethodImpl()

Ruft die statische Methode ab, die durch den aktuellen Delegaten dargestellt wird.

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Wird nicht unterstützt.

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von Object.)

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von Object.)

System_CAPS_pubmethodSystem_CAPS_staticRemove(Delegate, Delegate)

Entfernt das letzte Vorkommen der Aufrufliste eines Delegaten aus der Aufrufliste eines anderen Delegaten.

System_CAPS_pubmethodSystem_CAPS_staticRemoveAll(Delegate, Delegate)

Entfernt alle Vorkommen der Aufrufliste eines Delegaten aus der Aufrufliste eines anderen Delegaten.

System_CAPS_protmethodRemoveImpl(Delegate)

Entfernt die Aufrufliste eines Delegaten aus der Aufrufliste eines anderen Delegaten.

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von Object.)

NameBeschreibung
System_CAPS_puboperatorSystem_CAPS_staticEquality(Delegate, Delegate)

Bestimmt, ob die angegebenen Delegaten gleich sind.

System_CAPS_puboperatorSystem_CAPS_staticInequality(Delegate, Delegate)

Bestimmt, ob die angegebenen Delegaten ungleich sind.

NameBeschreibung
System_CAPS_pubmethodGetMethodInfo()

Ruft ein Objekt, das durch den angegebenen Delegaten dargestellte Methode darstellt.(Definido por RuntimeReflectionExtensions).

Die Delegate -Klasse ist die Basisklasse für Delegatentypen. Jedoch nur das System oder Compiler können ableiten explizit die Delegate Klasse oder aus der MulticastDelegate Klasse. Es ist auch nicht zulässig, einen neuen Typ von einem Delegattyp als Typ abzuleiten. Die Delegate Klasse gilt einen Delegattyp nicht; sie ist eine Klasse, die zum Ableiten von Delegattypen verwendet.

Die meisten Programmiersprachen implementieren eine delegate Schlüsselwort und die Compiler für diese Sprachen sind in der Lage, abgeleitet die MulticastDelegate Klasse, daher sollten Benutzer verwenden die delegate von der Sprache bereitgestellte Schlüsselwort.

System_CAPS_noteHinweis

Die common Language Runtime stellt eine Invoke Methode für jeden Delegattyp mit der gleichen Signatur wie der Delegat. Sie müssen nicht diese Methode explizit von c#, Visual Basic oder Visual C++ aufrufen, da der Compiler sie automatisch aufrufen. Die Invoke -Methode ist nützlich in Reflektion Wenn Sie die Signatur des Delegattyps suchen möchten.

Die common Language Runtime stellt jedem Delegattyp BeginInvoke und EndInvoke Methoden ermöglichen asynchronen Aufruf des Delegaten. Weitere Informationen über diese Methoden finden Sie unter Calling Synchronous Methods Asynchronously.

Die Deklaration eines Delegattyps richtet es sich um einen Vertrag, der die Signatur der eine oder mehrere Methoden angibt. Ein Delegat ist eine Instanz eines Delegattyps, die Verweise auf:

  • Eine Instanzmethode eines Typs und ein Zielobjekt, das diesem Typ zugeordnet werden können.

  • Eine Instanzmethode eines Typs, mit dem ausgeblendeten this Parameter in der Liste der formalen Parameter verfügbar gemacht werden. Der Delegat wird als eine offene Instanzdelegat sein.

  • Eine statische Methode.

  • Eine statische Methode und ein Zielobjekt, das an den ersten Parameter der Methode zugeordnet werden kann. Der Delegat wird als über dem ersten Argument geschlossen werden.

Weitere Informationen zu Delegaten Bindung finden Sie unter der CreateDelegate(Type, Object, MethodInfo, Boolean) Überladung.

System_CAPS_noteHinweis

In .NET Framework, Version 1.0 und 1.1 kann ein Delegat eine Methode darstellen, nur dann, wenn die Signatur der Methode genau die vom Typ Delegaten angegebenen Signatur entspricht. Daher werden nur die ersten und dritten Aufzählungszeichen in der vorangehenden Liste unterstützt und das erste Aufzählungszeichen erfordert einer genauen Übereinstimmung.

Wenn ein Delegat eine Instanzmethode geschlossen über dem ersten Argument (der häufigste Fall) darstellt, speichert der Delegat einen Verweis auf den Einstiegspunkt der Methode und einen Verweis auf ein Objekt, das als Ziel bezeichnet, also einen Typ, der dem Typ zugeordnet werden, die die Methode definiert. Wenn ein Delegat eine offene Instanzmethode darstellt, speichert er einen Verweis auf den Einstiegspunkt der Methode. Die Signatur des Delegaten muss die ausgeblendeten enthalten this Parameter in der Liste der formalen Parameter; in diesem Fall der Delegat keinen Verweis auf ein Zielobjekt und ein Zielobjekt muss angegeben werden, wenn der Delegat aufgerufen wird.

Wenn ein Delegat eine statische Methode darstellt, speichert der Delegat einen Verweis auf den Einstiegspunkt der Methode. Wenn ein Delegat eine statische Methode, die über dem ersten Argument geschlossen darstellt, speichert der Delegat einen Verweis auf den Einstiegspunkt der Methode und einen Verweis auf ein Zielobjekt, das den Typ des ersten Arguments der Methode zugeordnet werden kann. Wenn der Delegat aufgerufen wird, erhält das erste Argument der statischen Methode das Zielobjekt.

Die Aufrufliste eines Delegaten ist eine geordnete Menge von Delegaten, in denen jedes Element der Liste genau eine der vom Delegaten dargestellten Methoden aufruft. Eine Aufrufliste kann Methoden mehrfach enthalten. Während eines Aufrufs werden Methoden in der Reihenfolge aufgerufen, in denen sie in der Aufrufliste angezeigt werden. Ein Delegat versucht, jede Methode in der Aufrufliste aufgerufen. Duplikate werden einmal für jedes Mal, die sie in der Aufrufliste angezeigt werden aufgerufen. Delegaten sind unveränderlich. nach der Erstellung wird die Aufrufliste eines Delegaten nicht geändert.

Delegaten werden bezeichnet als Multicast- oder kombinierbare, da ein Delegat eine oder mehrere Methoden aufrufen kann und in Kombination von Vorgängen verwendet werden kann.

Kombinieren von Operationen, wie z. B. Combine und Remove, werden vorhandene Delegaten nicht geändert. Dieser Vorgang gibt stattdessen einen neuen Delegaten, der die Ergebnisse des Vorgangs ein unverändert-Delegat enthält oder null. Eine Kombinationsoperation gibt null Wenn das Ergebnis des Vorgangs ist ein Delegat, der nicht auf mindestens eine Methode verweist. Eine Kombinationsoperation gibt einen unveränderten Delegaten zurück, wenn der angeforderte Vorgang keine Auswirkung hat.

System_CAPS_noteHinweis

Verwaltete Sprachen verwenden die Combine und Remove Methoden an Delegaten Vorgänge zu implementieren. Beispiele hierfür sind die AddHandler und RemoveHandler Anweisungen in Visual Basic und die Operatoren += und -= auf Delegattypen in c#.

Beginnend mit der .NET Framework 4, generische Delegattypen können über Variante Typparameter verfügen. Kontravariante Typparameter als Parametertypen des Delegaten verwendet werden können, und kann ein kovarianten Typparameter als Rückgabetyp verwendet werden. Diese Funktion ermöglicht den generischen Delegaten Typen, die erstellt werden, aus der gleichen generischen Typdefinition zuweisungskompatibel, wenn ihre Typargumente Verweistypen mit einer vererbungsbeziehung sind sein, wie in erläutert Kovarianz und Kontravarianz in Generika.

System_CAPS_noteHinweis

Generische Delegaten, die zuweisungskompatibel sind aufgrund der Varianz sind nicht notwendigerweise kombinierbar. Um kombinierbar zu sein, müssen die Typen genau übereinstimmen. Nehmen wir beispielsweise an, dass eine Klasse mit dem Namen Derived stammt von einer Klasse namens Base. Ein Delegat vom Typ Action<Base> (Action(Of Base) in Visual Basic) kann einer Variablen vom Typ zugewiesen werden Action<Derived>, aber die beiden Delegaten können nicht kombiniert werden, da die Typen nicht genau übereinstimmen.

Wenn eine aufgerufene Methode eine Ausnahme auslöst, die Ausführung die Methode beendet, wird die Ausnahme an den Aufrufer des Delegaten übergeben und übrigen Methoden in der Aufrufliste werden nicht aufgerufen. Abfangen der Ausnahme im Aufrufer wird dieses Verhalten nicht geändert werden.

Wenn die Signatur der von einem Delegaten aufgerufenen Methoden einen Rückgabewert enthält, gibt der Delegat den Rückgabewert des letzten Elements in der Aufrufliste zurück. Wenn die Signatur einen Parameter, der als Verweis übergeben wird enthält, ist der endgültige Wert des Parameters das Ergebnis aller Methoden in der Aufrufliste sequenziell ausgeführt, und aktualisieren den Wert des Parameters.

Eines Delegaten in C oder C++ am ähnlichsten ist ein Funktionszeiger. Ein Delegat kann eine statische Methode oder Instanzmethode darstellen. Wenn der Delegat eine Instanzmethode darstellt, speichert der Delegat nicht nur einen Verweis auf den Einstiegspunkt der Methode, sondern auch einen Verweis auf die Klasseninstanz. Im Gegensatz zu Funktionszeigern sind Delegaten objektorientiert sind und typsicher.

Das folgende Beispiel zeigt, wie ein Delegat mit dem Namen myMethodDelegate. Instanzen dieses Delegaten werden für eine Instanzmethode und eine statische Methode der geschachtelten erstellt mySampleClass Klasse. Der Delegat für die Instanzmethode benötigt eine Instanz von mySampleClass. Die mySampleClass Instanz wird gespeichert, in einer Variablen namens mySC.

using System;
public class SamplesDelegate  {

   // Declares a delegate for a method that takes in an int and returns a String.
   public delegate String myMethodDelegate( int myInt );

   // Defines some methods to which the delegate can point.
   public class mySampleClass  {

      // Defines an instance method.
      public String myStringMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "positive" );
         if ( myInt < 0 )
            return( "negative" );
         return ( "zero" );
      }

      // Defines a static method.
      public static String mySignMethod ( int myInt )  {
         if ( myInt > 0 )
            return( "+" );
         if ( myInt < 0 )
            return( "-" );
         return ( "" );
      }
   }

   public static void Main()  {

      // Creates one delegate for each method. For the instance method, an
      // instance (mySC) must be supplied. For the static method, use the
      // class name.
      mySampleClass mySC = new mySampleClass();
      myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
      myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod );

      // Invokes the delegates.
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3, myD1( -3 ), myD2( -3 ) );
      Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
   }

}


/*
This code produces the following output:

5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/ 

Universal Windows Platform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portable Class Library
Unterstützt in: portable .NET platforms
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Öffentliche statische (in Visual Basic freigegebene) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Zurück zum Anfang
Anzeigen:
© 2016 Microsoft