Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase MulticastDelegate

 

Publicado: noviembre de 2016

Representa un delegado multidifusión; es decir, un delegado que puede tener más de un elemento en su lista de invocación.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

System.Object
  System.Delegate
    System.MulticastDelegate

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

NombreDescripción
System_CAPS_protmethodMulticastDelegate(Object, String)

Inicializa una nueva instancia de la clase MulticastDelegate.

System_CAPS_protmethodMulticastDelegate(Type, String)

Inicializa una nueva instancia de la clase MulticastDelegate.

NombreDescripción
System_CAPS_pubpropertyMethod

Obtiene el método representado por el delegado.(Heredado de Delegate).

System_CAPS_pubpropertyTarget

Obtiene la instancia de clase donde el delegado actual invoca al método de instancia.(Heredado de Delegate).

NombreDescripción
System_CAPS_pubmethodClone()

Crea una copia superficial del delegado.(Heredado de Delegate).

System_CAPS_protmethodCombineImpl(Delegate)

Esto combina Delegate con el parámetro Delegate para formar un nuevo delegado.(Invalida Delegate.CombineImpl(Delegate)).

System_CAPS_pubmethodDynamicInvoke(Object[])

Invoca dinámicamente (en tiempo de ejecución) al método representado por el delegado actual.(Heredado de Delegate).

System_CAPS_protmethodDynamicInvokeImpl(Object[])

Invoca dinámicamente (en tiempo de ejecución) al método representado por el delegado actual.(Heredado de Delegate).

System_CAPS_pubmethodEquals(Object)

Determina si este delegado multidifusión y el objeto especificado son iguales.(Invalida Delegate.Equals(Object)).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Invalida Delegate.GetHashCode()).

System_CAPS_pubmethodGetInvocationList()

Devuelve la lista de invocación de este delegado multidifusión, en el orden de invocación.(Invalida Delegate.GetInvocationList()).

System_CAPS_protmethodGetMethodImpl()

Devuelve un método estático representado por el actual MulticastDelegate.(Invalida Delegate.GetMethodImpl()).

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Rellena un SerializationInfo objeto con todos los datos necesarios para serializar esta instancia.(Invalida Delegate.GetObjectData(SerializationInfo, StreamingContext)).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_protmethodRemoveImpl(Delegate)

Quita un elemento de la lista de invocación de este MulticastDelegate que sea igual al delegado especificado.(Invalida Delegate.RemoveImpl(Delegate)).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

NombreDescripción
System_CAPS_puboperatorSystem_CAPS_staticEquality(MulticastDelegate, MulticastDelegate)

Determina si los dos objetos MulticastDelegate son iguales.

System_CAPS_puboperatorSystem_CAPS_staticInequality(MulticastDelegate, MulticastDelegate)

Determina si dos MulticastDelegate objetos no son iguales.

NombreDescripción
System_CAPS_pubmethodGetMethodInfo()

Obtiene un objeto que representa el método representado por el delegado especificado.(Definido por RuntimeReflectionExtensions).

MulticastDelegate es una clase especial. Los compiladores y otras herramientas pueden derivar de esta clase, pero no se derivan de él explícitamente. Lo mismo puede decirse de los Delegate clase.

Además de los métodos que los tipos de delegado heredan de MulticastDelegate, common language runtime proporciona dos métodos especiales: BeginInvoke y EndInvoke. Para obtener más información sobre estos métodos, vea Calling Synchronous Methods Asynchronously.

Un MulticastDelegate tiene una lista vinculada de delegados, denominada lista de invocación, que consta de uno o más elementos. Cuando se invoca un delegado multidifusión, los delegados en la lista de invocaciones se llaman de forma sincrónica en el orden en que aparecen. Si se produce un error durante la ejecución de la lista, se produce una excepción.

En el ejemplo siguiente se define una clase StringContainer, que incluye una colección de cadenas. Uno de los miembros es el CheckAndDisplayDelegate delegar, que se usa para mostrar las cadenas almacenadas en un StringContainer objetos que cumplen determinados criterios. El delegado toma una sola cadena como parámetro y devuelve void (o, en Visual Basic, es un Sub procedimiento). También incluye un método DisplayAllQualified, que tiene un único parámetro, un CheckAndDisplayDelegate delegar. Esto permite que se llame al método y mostrar un conjunto de cadenas que se filtran basándose en los métodos que contiene el delegado.

El ejemplo también define una clase de utilidad StringExtensions, que tiene dos métodos:

  • ConStart, que muestra las cadenas que comienzan con una consonante.

  • VowelStart, que muestra las cadenas que comienzan con una vocal.

Tenga en cuenta que ambos métodos incluyen un parámetro de cadena único y devuelven void. En otras palabras, ambos métodos se pueden asignar a la CheckAndDisplayDelegate delegar.

El Test.Main método es el punto de entrada de la aplicación. Crea una instancia de un StringContainer objeto, lo rellena con cadenas y crea dos CheckAndDisplayDelegate delegados, conStart y vowelStart, que invoca un método único. A continuación, llama el Delegate.Combine método para crear el multipleDelegates delegar, que inicialmente contiene el ConStart y VowelStart los delegados. Tenga en cuenta que cuando el multipleDelegates se invoca el delegado, muestra todas las cadenas de la colección en su orden original. Esto es porque cada letra se pasa por separado a cada delegado y cada letra cumple los criterios de filtrado de solo uno de los dos delegados. Finalmente, después de las llamadas a Delegate.Remove y Delegate.Combine, multipleDelegates contiene dos conStart delegados. Cuando se invoca, cada cadena de la StringContainer objeto aparece dos veces.

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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: