(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

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]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.AutoDual)]
public abstract class Delegate : ICloneable, 
	ISerializable

Der Delegate-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Geschützte MethodeDelegate(Object, String)Initialisiert einen Delegaten, der die angegebene Instanzenmethode für die angegebene Klasseninstanz aufruft.
Geschützte MethodeDelegate(Type, String)Initialisiert einen Delegaten, der die angegebene statische Methode der angegebenen Klasse aufruft.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekMethodRuft die Methode ab, die durch den Delegaten dargestellt wird.
Öffentliche EigenschaftUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsTargetRuft die Klasseninstanz ab, für die der aktuelle Delegat die Instanzenmethode aufruft.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeUnterstützt von XNA FrameworkCloneErstellt eine flache Kopie des Delegaten.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCombine(Delegate[])Verkettet die Aufruflisten eines Arrays von Delegaten.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsCombine(Delegate, Delegate)Verkettet die Aufruflisten zweier Delegaten.
Geschützte MethodeUnterstützt von XNA FrameworkCombineImplVerkettet die Aufruflisten des angegebenen und des aktuellen Multicastdelegaten.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekCreateDelegate(Type, MethodInfo)Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode darstellen soll.
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekCreateDelegate(Type, Object, MethodInfo)Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode oder Instanzmethode mit dem angegebenen ersten Argument darstellt.
Öffentliche MethodeStatischer MemberCreateDelegate(Type, Object, String)Erstellt einen Delegaten vom angegebenen Typ, der die angegebene Instanzenmethode darstellt, die für die angegebene Klasseninstanz aufgerufen werden soll.
Öffentliche MethodeStatischer MemberCreateDelegate(Type, MethodInfo, Boolean)Erstellt einen Delegaten vom angegeben Typ zum Darstellen der angegebenen statischen Methode mit dem angegebenen Verhalten bei Bindungsfehlern.
Öffentliche MethodeStatischer MemberCreateDelegate(Type, Type, String)Erstellt einen Delegaten vom angegebenen Typ, der die angegebene statische Methode der angegebenen Klasse darstellt.
Öffentliche MethodeStatischer MemberCreateDelegate(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.
Öffentliche MethodeStatischer MemberCreateDelegate(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.
Öffentliche MethodeStatischer MemberCreateDelegate(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.
Öffentliche MethodeStatischer MemberCreateDelegate(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.
Öffentliche MethodeStatischer MemberCreateDelegate(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.
Öffentliche MethodeUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsDynamicInvokeRuft die durch den aktuellen Delegaten dargestellte Methode dynamisch (mit später Bindung) auf.
Geschützte MethodeDynamicInvokeImplRuft die durch den aktuellen Delegaten dargestellte Methode dynamisch (mit später Bindung) auf.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsEqualsBestimmt, ob das angegebene Objekt und der aktuelle Delegat vom gleichen Typ sind und die gleichen Ziele, Methoden und Aufruflisten besitzen. (Überschreibt Object.Equals(Object).)
Geschützte MethodeUnterstützt von XNA FrameworkFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)

In XNA Framework wird dieser Member von Finalize() überschrieben.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetHashCodeGibt einen Hashcode für den Delegaten zurück. (Überschreibt Object.GetHashCode().)
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetInvocationListGibt die Aufrufliste des Delegaten zurück.
Geschützte MethodeGetMethodImplRuft die statische Methode ab, die durch den aktuellen Delegaten dargestellt wird.
Öffentliche MethodeGetObjectDataWird nicht unterstützt.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Geschützte MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsRemoveEntfernt das letzte Vorkommen der Aufrufliste eines Delegaten aus der Aufrufliste eines anderen Delegaten.
Öffentliche MethodeStatischer MemberUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsRemoveAllEntfernt alle Vorkommen der Aufrufliste eines Delegaten aus der Aufrufliste eines anderen Delegaten.
Geschützte MethodeUnterstützt von XNA FrameworkRemoveImplEntfernt die Aufrufliste eines Delegaten aus der Aufrufliste eines anderen Delegaten.
Öffentliche MethodeUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

  NameBeschreibung
Öffentlicher OperatorStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsEqualityBestimmt, ob die angegebenen Delegaten gleich sind.
Öffentlicher OperatorStatischer MemberUnterstützt von XNA FrameworkUnterstützt von Portable KlassenbibliothekUnterstützt in .NET für Windows Store-AppsInequalityBestimmt, ob die angegebenen Delegaten ungleich sind.
Zum Seitenanfang

  NameBeschreibung
Öffentliche ErweiterungsmethodeUnterstützt in .NET für Windows Store-AppsGetMethodInfoRuft ein Objekt, das durch den angegebenen Delegaten dargestellte Methode darstellt. (Durch RuntimeReflectionExtensions definiert.)
Zum Seitenanfang

Die Delegate-Klasse ist die Basisklasse für Delegatentypen. Nur das System oder Compiler können jedoch explizit von der Delegate-Klasse oder von der MulticastDelegate-Klasse ableiten. Es ist auch nicht zulässig, von einem Delegatentyp einen neuen Typ abzuleiten. Die Delegate-Klasse wird nicht als Delegatentyp betrachtet. Sie ist eine Klasse zum Ableiten von Delegatentypen.

Die meisten Programmiersprachen implementieren das Schlüsselwort delegate, und Compiler für diese Sprachen können von der MulticastDelegate-Klasse ableiten. Benutzer sollten daher das von der Sprache bereitgestellte Schlüsselwort delegate verwenden.

HinweisHinweis

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

Die Common Language Runtime stellt jedem Delegattyp die BeginInvoke-Methode und die EndInvoke-Methode zur Verfügung, um den asynchronen Aufruf des Delegaten zu aktivieren. Weitere Informationen über diese Methoden finden Sie unter Asynchrones Aufrufen von synchronen Methoden.

Durch die Deklaration eines Delegatentyps wird ein Vertrag erstellt, der die Signatur einer oder mehrerer Methoden angibt. Ein Delegat ist eine Instanz eines Delegattyps, der auf Folgendes verweist:

  • Eine Instanzmethode eines Typs und ein Zielobjekt, das diesem Typ zugeordnet werden kann.

  • Eine Instanzmethode eines Typs, mit dem ausgeblendeten this-Parameter, der in der formalen Parameterliste verfügbar gemacht wird. Der Delegat wird als ein offener Instanzdelegat bezeichnet.

  • Eine statische Methode.

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

Weitere Informationen zur Delegatbindung finden Sie in der CreateDelegate(Type, Object, MethodInfo, Boolean)-Methodenüberladung.

HinweisHinweis

In .NET Framework, Version 1.0 und 1.1, kann ein Delegat eine Methode nur darstellen, wenn die Signatur der Methode genau mit der durch den Delegattyp angegebenen Signatur übereinstimmt. Daher werden nur die unter Punkt 1 und 3 in der vorhergehenden Liste beschriebenen Elemente unterstützt, und beim ersten Aufzählungspunkt ist eine genaue Typübereinstimmung erforderlich.

Wenn ein Delegat eine über seinem ersten Argument geschlossene Instanzmethode darstellt (der Normalfall), speichert der Delegat einen Verweis auf den Einstiegspunkt der Methode und einen Verweis auf ein Objekt, das als Ziel bezeichnet wird und von einem Typ ist, der dem durch die Methode definierten Typ zugeordnet werden kann. Wenn ein Delegat eine offene Instanzmethode darstellt, speichert er einen Verweis auf den Einstiegspunkt der Methode. Die Signatur des Delegaten muss in der formalen Parameterliste den ausgeblendeten this-Parameter enthalten. In diesem Fall verfügt der Delegat über keinen Verweis auf ein Zielobjekt, sodass das Zielobjekt beim Aufruf des Delegaten bereitgestellt werden muss.

Wenn ein Delegat eine statische Methode darstellt, wird im Delegaten ein Verweis auf den Einstiegspunkt der Methode gespeichert. Wenn ein Delegat eine über seinem ersten Element geschlossene statische Methode darstellt, speichert der Delegat einen Verweis auf den Einstiegspunkt der Methode und einen Verweis auf das Zielobjekt, das dem Typ des ersten Arguments der Methode zugeordnet werden kann. Beim Aufruf des Delegaten empfängt das erste Argument der statischen Methode das Zielobjekt.

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

Delegaten werden als Multicast- oder kombinierbare Delegaten bezeichnet, weil ein Delegat eine oder mehr Methoden aufrufen kann und in Kombinationsvorgängen verwendet werden kann.

Durch Kombinationsoperationen wie Combine und Remove werden vorhandene Delegaten nicht geändert. Eine Kombinationsoperation gibt stattdessen einen neuen Delegaten zurück, der die Ergebnisse der Operation, einen nicht geänderten Delegaten oder null enthält. Eine Kombinationsoperation gibt null zurück, wenn das Ergebnis der Operation ein Delegat ist, der nicht auf mindestens eine Methode verweist. Eine Kombinationsoperation gibt einen nicht geänderten Delegaten zurück, wenn die angeforderte Operation keine Auswirkungen hat.

HinweisHinweis

Verwaltete Sprachen verwenden die Combine-Methode und Remove-Methode, um Stellvertreteroperationen zu implementieren. Zu den Beispielen gehören u.a. AddHandler-Anweisungen und RemoveHandler-Anweisungen in Visual Basic sowie die Operatoren += and -= für Delegattypen in C#.

Beginnend bei .NET Framework 4 können die generischen Delegattypen verschiedene Typparameter aufweisen. Kovariante Typparameter können als Parametertypen des Delegaten verwendet ewrden, und ein kovarianter Typparameter kann als Rückgabetyp verwendet werden. Diese Funktion lässt generische Delegattypen zu, die aus der gleichen generischen Typdefinition erstellt werden, um zuweisungskompatibel zu sein, wenn ihre Typargumente Verweistypen mit einer Vererbungsbeziehung sind, wie in Kovarianz und Kontravarianz in Generika erklärt.

HinweisHinweis

Generische Delegaten, die wegen der Varianz zuweisungskompatibel sind, sind nicht notwendigerweise kombinierbar. Um kombinierbar zu sein, müssen die Typen genau zusammenpassen. Angenommen, die Klasse Derived ist von der Basisklasse Base abgeleitet. Ein Delegat vom Typ Action<Base> (Action(Of Base) in Visual Basic) kann einer Variablen vom Typ Action<Derived> zugewiesen werden, die beiden Delegaten können jedoch nicht kombiniert werden, da die Typen nicht genau übereinstimmen.

Wenn die aufgerufene Methode eine Ausnahme auslöst, wird die Ausführung der Methode abgebrochen und die Ausnahme an den Aufrufer des Delegaten übergeben. Weitere Methoden in der Aufrufliste werden nicht aufgerufen. Wenn der Aufrufer die Ausnahme abfängt, ändert sich dieses Verhalten nicht.

Wenn die Signatur der vom Delegaten aufgerufenen Methoden einen Rückgabewert enthält, gibt der Delegat den Rückgabewert des letzten Elements der Aufrufliste zurück. Wenn die Signatur einen als Verweis übergebenen Parameter enthält, ist der Endwert des Parameters das Ergebnis der Ausführung aller Methoden in der Reihenfolge der Aufrufliste und der Aktualisierung des Parameterwerts.

Ein Funktionszeiger kommt einem Delegaten in C oder C++ am nächsten. Ein Delegat kann eine statische Methode oder eine Instanzmethode darstellen. Wenn der Delegat eine Instanzmethode darstellt, speichert dieser nicht nur einen Verweis auf den Einstiegspunkt der Methode, sondern außerdem einen Verweis auf die Klasseninstanz. Im Gegensatz zu Funktionszeigern sind Delegaten objektorientiert und typsicher.

Im folgenden Beispiel wird die Definition eines Delegaten mit dem Namen myMethodDelegate gezeigt. Instanzen dieses Delegaten werden für eine Instanzmethode und für eine statische Methode der geschachtelten mySampleClass-Klasse erstellt. Der Delegat für die Instanzmethode benötigt eine Instanz von mySampleClass. Die mySampleClass-Instanz wird in einer Variablen mit dem Namen mySC gespeichert.


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 "".
*/ 



.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft