Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Classe MulticastDelegate

Rappresenta un delegato multicast, ossia un delegato che può avere più di un elemento nel suo elenco di chiamata.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

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

Il tipo MulticastDelegate espone i seguenti membri.

  NomeDescrizione
Metodo protettoMulticastDelegate(Object, String)Inizializza una nuova istanza della classe MulticastDelegate.
Metodo protettoMulticastDelegate(Type, String)Inizializza una nuova istanza della classe MulticastDelegate.
In alto

  NomeDescrizione
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileMethodOttiene il metodo rappresentato dal delegato. (Ereditato da Delegate)
Proprietà pubblicaSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreTargetOttiene l'istanza di classe sulla quale il metodo di istanza viene richiamato dal delegato corrente. (Ereditato da Delegate)
In alto

  NomeDescrizione
Metodo pubblicoSupportato da XNA FrameworkCloneCrea una copia dei riferimenti del delegato. (Ereditato da Delegate)
Metodo protettoSupportato da XNA FrameworkCombineImplAssocia l'oggetto Delegate con l'oggetto Delegate specificato per creare un nuovo delegato. (Esegue l'override di Delegate.CombineImpl(Delegate)).
Metodo pubblicoSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreDynamicInvokeRichiama dinamicamente, ovvero ad associazione tardiva, il metodo rappresentato dal delegato corrente. (Ereditato da Delegate)
Metodo protettoDynamicInvokeImplRichiama dinamicamente, ovvero ad associazione tardiva, il metodo rappresentato dal delegato corrente. (Ereditato da Delegate)
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreEqualsDetermina se questo delegato multicast e l'oggetto specificato sono uguali. (Esegue l'override di Delegate.Equals(Object)).
Metodo protettoSupportato da XNA FrameworkFinalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object)

In XNA Framework, Finalize() esegue l'override di questo membro.
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetHashCode Restituisce il codice hash per questa istanza. (Esegue l'override di Delegate.GetHashCode()).
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetInvocationListRestituisce l'elenco chiamate di questo delegato multicast, in ordine di chiamata. (Esegue l'override di Delegate.GetInvocationList()).
Metodo protettoGetMethodImplRestituisce un metodo statico rappresentato dall'oggetto MulticastDelegate corrente. (Esegue l'override di Delegate.GetMethodImpl()).
Metodo pubblicoGetObjectDataCompila un oggetto SerializationInfo con tutti i dati necessari per serializzare questa istanza. (Esegue l'override di Delegate.GetObjectData(SerializationInfo, StreamingContext)).
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreGetType Ottiene il Type dell'istanza corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreMemberwiseClone Crea una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA FrameworkRemoveImplRimuove un elemento uguale al delegato specificato dall'elenco chiamate di questo MulticastDelegate. (Esegue l'override di Delegate.RemoveImpl(Delegate)).
Metodo pubblicoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreToString Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object)
In alto

  NomeDescrizione
Operatore pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreEqualityDetermina se due oggetti MulticastDelegate sono uguali.
Operatore pubblicoMembro staticoSupportato da XNA FrameworkSupportato da Libreria di classi portabileSupportato in .NET per applicazioni Windows StoreInequalityDetermina se due oggetti MulticastDelegate non sono uguali.
In alto

  NomeDescrizione
Metodo di estensione pubblicoSupportato in .NET per applicazioni Windows StoreGetMethodInfoOttiene un oggetto che rappresenta il metodo rappresentato dal delegato specificato. (Definito da RuntimeReflectionExtensions).
In alto

MulticastDelegate è una classe speciale. È possibile far derivare da questa classe compilatori e altri strumenti, ma non in maniera esplicita. Anche la classe Delegate dispone di queste caratteristiche.

Oltre ai metodi che i tipi delegati ereditano da MulticastDelegate, Common Language Runtime fornisce due metodi speciali: BeginInvoke ed EndInvoke. Per ulteriori informazioni su tali metodi, vedere Chiamata asincrona dei metodi sincroni.

Una classe MulticastDelegate dispone di un elenco collegato di delegati, denominato elenco chiamate e costituito da uno o più elementi. Quando viene chiamato un delegato multicast, i delegati nell'elenco chiamate vengono chiamati contemporaneamente nell'ordine in cui appaiono. Se si verifica un errore durante l'esecuzione dell'elenco, verrà generata un'eccezione.

Nell'esempio riportato di seguito viene illustrato l'utilizzo di una classe derivata da MulticastDelegate.


using System;

    // This class contains strings. It has a member method that
    // accepts a multicast delegate as a parameter and calls it.

    class HoldsStrings
    {
        // The following line causes the compiler to generate
        // a new delegate class named CheckAndPrintDelegate that
        // inherits from System.MulticastDelegate.
        public delegate void CheckAndPrintDelegate(string str);

        // An ArrayList that holds strings
        private System.Collections.ArrayList myStringArray = new System.Collections.ArrayList();

        // A method that adds more strings to the Collection
        public void addstring( string str) {
            myStringArray.Add(str);
        }

        // Iterate through the strings and invoke the method(s) that the delegate points to
        public void PrintAllQualified(CheckAndPrintDelegate myDelegate) {
            foreach (string str in myStringArray) {
                myDelegate(str);
            }
        }
    }   //end of class HoldsStrings

    // This class contains a few sample methods
    class StringFuncs
    {
        // This method prints a string that it is passed if the string starts with a vowel
        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);
        }

        // This method prints a string that it is passed if the string starts with a consonant
        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);
        }
    }

    // This class demonstrates using Delegates, including using the Remove and
    // Combine methods to create and modify delegate combinations.
    class Test
    {
        static public void Main()
        {
            // Declare the HoldsStrings class and add some strings
            HoldsStrings myHoldsStrings = new HoldsStrings();
            myHoldsStrings.addstring("This");
            myHoldsStrings.addstring("is");
            myHoldsStrings.addstring("a");
            myHoldsStrings.addstring("multicast");
            myHoldsStrings.addstring("delegate");
            myHoldsStrings.addstring("example");

            // Create two delegates individually using different methods
            HoldsStrings.CheckAndPrintDelegate ConStartDel =
                new HoldsStrings.CheckAndPrintDelegate(StringFuncs.ConStart);
            HoldsStrings.CheckAndPrintDelegate VowStartDel =
                new HoldsStrings.CheckAndPrintDelegate(StringFuncs.VowelStart);

            // Demonstrate that MulticastDelegates may store only one delegate
            Delegate [] DelegateList;

            // Returns an array of all delegates stored in the linked list of the
            // MulticastDelegate. In these cases the lists will hold only one (Multicast) delegate
            DelegateList = ConStartDel.GetInvocationList();
            Console.WriteLine("ConStartDel contains " + DelegateList.Length + " delegate(s).");
            DelegateList = VowStartDel.GetInvocationList();
            Console.WriteLine("ConStartVow contains " + DelegateList.Length + " delegate(s).");

            // Determine whether the delegates are System.Multicast delegates
            // if (ConStartDel is System.MulticastDelegate && VowStartDel is System.MulticastDelegate) {
                Console.WriteLine("ConStartDel and ConStartVow are System.MulticastDelegates");
            // }

            // Run the two single delegates one after the other
            Console.WriteLine("Running ConStartDel delegate:");
            myHoldsStrings.PrintAllQualified(ConStartDel);
            Console.WriteLine("Running VowStartDel delegate:");
            myHoldsStrings.PrintAllQualified(VowStartDel);

            // Create a new, empty MulticastDelegate
            HoldsStrings.CheckAndPrintDelegate MultiDel;

            // Delegate.Combine receives an unspecified number of MulticastDelegates as parameters
            MultiDel = (HoldsStrings.CheckAndPrintDelegate) Delegate.Combine(ConStartDel, VowStartDel);

            // How many delegates is this delegate holding?
            DelegateList = MultiDel.GetInvocationList();
            Console.WriteLine("\nMulitDel contains " + DelegateList.Length + " delegates.");

            // What happens when this mulitcast delegate is passed to PrintAllQualified
            Console.WriteLine("Running the multiple delegate that combined the first two");
            myHoldsStrings.PrintAllQualified(MultiDel);

            // The Remove and Combine methods modify the multiple delegate
            MultiDel = (HoldsStrings.CheckAndPrintDelegate) Delegate.Remove(MultiDel, VowStartDel);
            MultiDel = (HoldsStrings.CheckAndPrintDelegate) Delegate.Combine(MultiDel, ConStartDel);

            // Finally, pass the combined delegates to PrintAllQualified again
            Console.WriteLine("\nRunning the multiple delegate that contains two copies of ConStartDel:");
            myHoldsStrings.PrintAllQualified(MultiDel);

            return;
        }   //end of main
    }   //end of Test


.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato 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 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2014 Microsoft