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

MulticastDelegate-Klasse

 

Veröffentlicht: Oktober 2016

Stellt einen Multicastdelegaten dar, d. h. einen Delegaten, in dessen Aufrufliste sich mehrere Elemente befinden können.

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

System.Object
  System.Delegate
    System.MulticastDelegate

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class MulticastDelegate : Delegate

NameBeschreibung
System_CAPS_protmethodMulticastDelegate(Object, String)

Initialisiert eine neue Instanz der MulticastDelegate-Klasse.

System_CAPS_protmethodMulticastDelegate(Type, String)

Initialisiert eine neue Instanz der MulticastDelegate-Klasse.

NameBeschreibung
System_CAPS_pubpropertyMethod

Ruft die Methode ab, die durch den Delegaten dargestellt wird.(Geerbt von „Delegate“.)

System_CAPS_pubpropertyTarget

Ruft die Klasseninstanz ab, für die der aktuelle Delegat die Instanzenmethode aufruft.(Geerbt von „Delegate“.)

NameBeschreibung
System_CAPS_pubmethodClone()

Erstellt eine flache Kopie des Delegaten.(Geerbt von „Delegate“.)

System_CAPS_protmethodCombineImpl(Delegate)

Dies kombiniert Delegate mit dem angegebenen Delegate um einen neuen Delegaten zu bilden.(Überschreibt Delegate.CombineImpl(Delegate).)

System_CAPS_pubmethodDynamicInvoke(Object[])

Ruft die durch den aktuellen Delegaten dargestellte Methode dynamisch (mit später Bindung) auf.(Geerbt von „Delegate“.)

System_CAPS_protmethodDynamicInvokeImpl(Object[])

Ruft die durch den aktuellen Delegaten dargestellte Methode dynamisch (mit später Bindung) auf.(Geerbt von „Delegate“.)

System_CAPS_pubmethodEquals(Object)

Bestimmt, ob dieser Multicastdelegat und das angegebene Objekt übereinstimmen.(Überschreibt Delegate.Equals(Object).)

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 den Hashcode für diese Instanz zurück.(Überschreibt Delegate.GetHashCode().)

System_CAPS_pubmethodGetInvocationList()

Gibt die Aufrufliste dieses Multicastdelegaten in der Reihenfolge der Aufrufe zurück.(Überschreibt Delegate.GetInvocationList().)

System_CAPS_protmethodGetMethodImpl()

Gibt eine statische Methode, die vom aktuellen MulticastDelegate.(Überschreibt Delegate.GetMethodImpl().)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Füllt ein SerializationInfo -Objekt mit allen für das Serialisieren dieser Instanz erforderlichen Daten.(Überschreibt Delegate.GetObjectData(SerializationInfo, StreamingContext).)

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_protmethodRemoveImpl(Delegate)

Entfernt ein Element aus der Aufrufliste dieses MulticastDelegate gleich dem angegebenen Delegaten.(Überschreibt Delegate.RemoveImpl(Delegate).)

System_CAPS_pubmethodToString()

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

NameBeschreibung
System_CAPS_puboperatorSystem_CAPS_staticEquality(MulticastDelegate, MulticastDelegate)

Bestimmt, ob zwei MulticastDelegate-Objekte gleich sind.

System_CAPS_puboperatorSystem_CAPS_staticInequality(MulticastDelegate, MulticastDelegate)

Bestimmt, ob zwei MulticastDelegate -Objekte ungleich sind.

NameBeschreibung
System_CAPS_pubmethodGetMethodInfo()

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

MulticastDelegate ist eine besondere Klasse. Compiler und andere Tools können von dieser Klasse abgeleitet werden, aber Sie können nicht davon abgeleitet explizit. Das gleiche gilt für die Delegate Klasse.

Zusätzlich zu den Methoden, die Delegattypen erben von MulticastDelegate, die common Language Runtime stellt zwei spezielle Methoden bereit: BeginInvoke und EndInvoke. Weitere Informationen über diese Methoden finden Sie unter Calling Synchronous Methods Asynchronously.

Ein MulticastDelegate verfügt über eine verknüpfte Liste von Delegaten, bezeichnet als Aufrufliste bestehend aus einem oder mehreren Elementen. Wenn ein multicast-Delegat aufgerufen wird, werden die Delegaten in der Aufrufliste synchron in der Reihenfolge aufgerufen werden. Wenn während der Ausführung der Liste ein Fehler auftritt, wird eine Ausnahme ausgelöst.

Das folgende Beispiel definiert eine Klasse StringContainer, die eine Auflistung von Zeichenfolgen enthält. Eines ihrer Mitglieder ist der CheckAndDisplayDelegate zu delegieren, die dient zum Anzeigen von Zeichenfolgen, die ein StringContainer -Objekt, das bestimmte Kriterien erfüllen. Der Delegat enthält eine einzelne Zeichenfolge als Parameter und gibt void (oder in Visual Basic ist ein Sub Verfahren). Es enthält auch eine Methode, DisplayAllQualified, die einen einzelnen Parameter hat eine CheckAndDisplayDelegate delegieren. Dadurch wird die Methode aufgerufen werden, und zum Anzeigen eines Satzes von Zeichenfolgen, die gefiltert werden anhand der Methoden, die der Delegaten enthält.

Im Beispiel definiert auch eine Hilfsprogrammklasse StringExtensions, die verfügt über zwei Methoden:

  • ConStart, der anzeigt, dass Zeichenfolgen, die mit einem Konsonanten beginnen.

  • VowelStart, der anzeigt, dass Zeichenfolgen, die mit einem Vokal beginnen.

Beachten Sie, dass beide Methoden einen einzelnen Zeichenfolgenparameter enthalten und Rückgabewerte void. Anders gesagt können beide Methoden zugewiesen werden, auf die CheckAndDisplayDelegate delegieren.

Die Test.Main -Methode ist der Einstiegspunkt der Anwendung. Instanziiert ein StringContainer -Objekt, füllt es mit Zeichenfolgen und erstellt zwei CheckAndDisplayDelegate Delegaten, conStart und vowelStart, eine einzelne Methode aufgerufen. Es ruft dann die Delegate.Combine Methode zum Erstellen der multipleDelegates zu delegieren, die Anfangs enthält die ConStart und VowelStart Delegaten. Hinweis: Wenn die multipleDelegates Delegat aufgerufen wird, werden alle Zeichenfolgen in der Auflistung in der ursprünglichen Reihenfolge angezeigt. Dies ist, da jeder Buchstabe separat zu den Delegaten übergeben wird, und jeder Buchstabe die Filterkriterien nur eines der zwei Delegaten erfüllt. Zum Schluss nach Aufrufen der Delegate.Remove und Delegate.Combine, multipleDelegates enthält zwei conStart Delegaten. Wenn sie aufgerufen wird, jede Zeichenfolge in der StringContainer Objekt wird zweimal angezeigt.

using System;
using System.Collections.Generic;

class StringContainer
{
   // Define a delegate to handle string display. 
   public delegate void CheckAndDisplayDelegate(string str);

   // A generic list object that holds the strings. 
   private List<String> container = new List<String>();

   // A method that adds strings to the collection. 
   public void AddString(string str) 
   {
      container.Add(str);
   }

   // Iterate through the strings and invoke the method(s) that the delegate points to. 
   public void DisplayAllQualified(CheckAndDisplayDelegate displayDelegate) 
   {
      foreach (var str in container) {
         displayDelegate(str);
      }
   }
 }    

// This class defines some methods to display strings. 
class StringExtensions
{
   // Display a string if it starts with a consonant. 
   public static void ConStart(string str) 
   {
      if (!(str[0]=='a'||str[0]=='e'||str[0]=='i'||str[0]=='o'||str[0]=='u'))
          Console.WriteLine(str);
   }

   // Display a string if it starts with a vowel.
   public static void VowelStart(string str) 
   {
      if ((str[0]=='a'||str[0]=='e'||str[0]=='i'||str[0]=='o'||str[0]=='u'))
          Console.WriteLine(str);
   }
}

// Demonstrate the use of delegates, including the Remove and 
// Combine methods to create and modify delegate combinations. 
class Test
{
   static public void Main()
   {
      // Declare the StringContainer class and add some strings
      StringContainer container = new StringContainer();
      container.AddString("This");
      container.AddString("is");
      container.AddString("a");
      container.AddString("multicast");
      container.AddString("delegate");
      container.AddString("example");

      // Create two delegates individually using different methods.
      StringContainer.CheckAndDisplayDelegate conStart = StringExtensions.ConStart;
      StringContainer.CheckAndDisplayDelegate vowelStart = StringExtensions.VowelStart;

      // Get the list of all delegates assigned to this MulticastDelegate instance. 
      Delegate[] delegateList = conStart.GetInvocationList();
      Console.WriteLine("conStart contains {0} delegate(s).", delegateList.Length);
      delegateList = vowelStart.GetInvocationList();
      Console.WriteLine("vowelStart contains {0} delegate(s).\n", delegateList.Length);

      // Determine whether the delegates are System.Multicast delegates. 
      if (conStart is System.MulticastDelegate && vowelStart is System.MulticastDelegate) 
          Console.WriteLine("conStart and vowelStart are derived from MulticastDelegate.\n");

      // Execute the two delegates.
      Console.WriteLine("Executing the conStart delegate:");
      container.DisplayAllQualified(conStart);
      Console.WriteLine();
      Console.WriteLine("Executing the vowelStart delegate:");
      container.DisplayAllQualified(vowelStart);
      Console.WriteLine();

      // Create a new MulticastDelegate and call Combine to add two delegates.
      StringContainer.CheckAndDisplayDelegate multipleDelegates = 
            (StringContainer.CheckAndDisplayDelegate) Delegate.Combine(conStart, vowelStart);

      // How many delegates does multipleDelegates contain?
      delegateList = multipleDelegates.GetInvocationList();
      Console.WriteLine("\nmultipleDelegates contains {0} delegates.\n",
                        delegateList.Length);

      // Pass this multicast delegate to DisplayAllQualified.
      Console.WriteLine("Executing the multipleDelegate delegate.");
      container.DisplayAllQualified(multipleDelegates);

      // Call remove and combine to change the contained delegates.
      multipleDelegates = (StringContainer.CheckAndDisplayDelegate) Delegate.Remove(multipleDelegates, vowelStart);
      multipleDelegates = (StringContainer.CheckAndDisplayDelegate) Delegate.Combine(multipleDelegates, conStart);

      // Pass multipleDelegates to DisplayAllQualified again.
      Console.WriteLine("\nExecuting the multipleDelegate delegate with two conStart delegates:");
      container.DisplayAllQualified(multipleDelegates);
   }
}
// The example displays the following output:
//    conStart contains 1 delegate(s).
//    vowelStart contains 1 delegate(s).
//    
//    conStart and vowelStart are derived from MulticastDelegate.
//    
//    Executing the conStart delegate:
//    This
//    multicast
//    delegate
//    
//    Executing the vowelStart delegate:
//    is
//    a
//    example
//    
//    
//    multipleDelegates contains 2 delegates.
//    
//    Executing the multipleDelegate delegate.
//    This
//    is
//    a
//    multicast
//    delegate
//    example
//    
//    Executing the multipleDelegate delegate with two conStart delegates:
//    This
//    This
//    multicast
//    multicast
//    delegate
//    delegate

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: