MulticastDelegate Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Csoportos küldési meghatalmazottat jelöl; vagyis egy olyan meghatalmazott, amelynek a meghívási listájában több elem is szerepelhet.
public ref class MulticastDelegate abstract : Delegate
public abstract class MulticastDelegate : Delegate
[System.Serializable]
public abstract class MulticastDelegate : Delegate
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class MulticastDelegate : Delegate
type MulticastDelegate = class
inherit Delegate
[<System.Serializable>]
type MulticastDelegate = class
inherit Delegate
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type MulticastDelegate = class
inherit Delegate
Public MustInherit Class MulticastDelegate
Inherits Delegate
- Öröklődés
- Attribútumok
Példák
Az alábbi példa egy osztályt határoz meg, StringContaineramely sztringek gyűjteményét tartalmazza. Az egyik tagja a CheckAndDisplayDelegate meghatalmazott, amely egy adott feltételnek megfelelő objektumban tárolt sztringek StringContainer megjelenítésére szolgál. A meghatalmazott egyetlen sztringet vesz fel paraméterként, és void ad vissza (vagy Visual Basic ez egy Sub eljárás). Emellett tartalmaz egy metódust is, DisplayAllQualifiedamely egyetlen paraméterrel, delegáltként CheckAndDisplayDelegate rendelkezik. Ez lehetővé teszi a metódus meghívását, valamint a delegált által tartalmazott metódusok alapján szűrt sztringek készletének megjelenítését.
A példa egy segédprogramosztályt is definiál, StringExtensionsamely két metódussal rendelkezik:
ConStart, amely mássalhangzóval kezdődő sztringeket jelenít meg.VowelStart, amely magánhangzóval kezdődő sztringeket jelenít meg.
Vegye figyelembe, hogy mindkét metódus egyetlen sztringparamétert tartalmaz, és visszaadja a függvényt void. Más szóval mindkét módszer hozzárendelhető a CheckAndDisplayDelegate meghatalmazotthoz.
A Test.Main metódus az alkalmazás belépési pontja. Létrehoz egy StringContainer objektumot, sztringekkel tölti fel, és létrehoz két CheckAndDisplayDelegate meghatalmazottat, conStart és vowelStartegyetlen metódust hív meg. Ezután meghívja a metódust a Delegate.CombinemultipleDelegates meghatalmazott létrehozásához, amely kezdetben tartalmazza a meghatalmazottakat és ConStart a VowelStart meghatalmazottakat. Vegye figyelembe, hogy a multipleDelegates meghatalmazott meghívásakor a gyűjtemény összes sztringje az eredeti sorrendben jelenik meg. Ennek az az oka, hogy minden levél külön-külön lesz átadva az egyes meghatalmazottaknak, és minden levél megfelel a két meghatalmazott közül csak egy szűrési feltételének. Végül a hívásokat Delegate.RemoveDelegate.CombinemultipleDelegates követően két conStart meghatalmazottat tartalmaz. A meghíváskor az StringContainer objektum minden sztringje kétszer jelenik meg.
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
module Test
open System
// Define a delegate to handle string display.
type CheckAndDisplayDelegate = delegate of string -> unit
type StringContainer() =
// A generic ResizeArray object that holds the strings.
let container = ResizeArray()
// A method that adds strings to the collection.
member _.AddString(str) =
container.Add str
// Iterate through the strings and invoke the method(s) that the delegate points to.
member _.DisplayAllQualified(displayDelegate: CheckAndDisplayDelegate) =
for str in container do
displayDelegate.Invoke str
// This module defines some functions to display strings.
module StringExtensions =
// Display a string if it starts with a consonant.
let conStart (str: string) =
match str[0] with
| 'a' | 'e' | 'i' | 'o' | 'u' -> ()
| _ -> printfn $"{str}"
// Display a string if it starts with a vowel.
let vowelStart (str: string) =
match str[0] with
| 'a' | 'e' | 'i' | 'o' | 'u' -> printfn $"{str}"
| _ -> ()
// Demonstrate the use of delegates, including the Remove and
// Combine methods to create and modify delegate combinations.
[<EntryPoint>]
let main _ =
// Declare the StringContainer class and add some strings
let container = 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.
let conStart = CheckAndDisplayDelegate StringExtensions.conStart
let vowelStart = CheckAndDisplayDelegate StringExtensions.vowelStart
// Get the list of all delegates assigned to this MulticastDelegate instance.
let delegateList = conStart.GetInvocationList()
printfn $"conStart contains {delegateList.Length} delegate(s)."
let delegateList = vowelStart.GetInvocationList()
printfn $"vowelStart contains {delegateList.Length} delegate(s).\n"
// Determine whether the delegates are System.Multicast delegates.
if box conStart :? System.MulticastDelegate && box vowelStart :? System.MulticastDelegate then
printfn "conStart and vowelStart are derived from MulticastDelegate.\n"
// Execute the two delegates.
printfn "Executing the conStart delegate:"
container.DisplayAllQualified conStart
printfn "\nExecuting the vowelStart delegate:"
container.DisplayAllQualified vowelStart
printfn ""
// Create a new MulticastDelegate and call Combine to add two delegates.
let multipleDelegates =
Delegate.Combine(conStart, vowelStart) :?> CheckAndDisplayDelegate
// How many delegates does multipleDelegates contain?
let delegateList = multipleDelegates.GetInvocationList()
printfn $"\nmultipleDelegates contains {delegateList.Length} delegates.\n"
// Pass this multicast delegate to DisplayAllQualified.
printfn "Executing the multipleDelegate delegate."
container.DisplayAllQualified multipleDelegates
// Call remove and combine to change the contained delegates.
let multipleDelegates = Delegate.Remove(multipleDelegates, vowelStart) :?> CheckAndDisplayDelegate
let multipleDelegates = Delegate.Combine(multipleDelegates, conStart) :?> CheckAndDisplayDelegate
// Pass multipleDelegates to DisplayAllQualified again.
printfn "\nExecuting the multipleDelegate delegate with two conStart delegates:"
printfn $"{multipleDelegates}"
0
// 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
Imports System.Collections.Generic
Class StringContainer
' Define a delegate to handle string display.
Delegate Sub CheckAndPrintDelegate(ByVal str As String)
' A generic list object that holds the strings.
Private container As New List(Of String)()
' A method that adds strings to the collection.
Public Sub AddString(ByVal s As String)
container.Add(s)
End Sub
' Iterate through the strings and invoke the method(s) that the delegate points to.
Public Sub DisplayAllQualified(ByVal displayDelegate As CheckAndPrintDelegate)
For Each s In container
displayDelegate(s)
Next
End Sub
End Class
' This class defines some methods to display strings.
Class StringExtensions
' Display a string if it starts with a consonant.
Public Shared Sub ConStart(ByVal str As String)
If Not (str.Chars(0) = "a"c Or str.Chars(0) = "e"c Or str.Chars(0) = "i"c _
Or str.Chars(0) = "o"c Or str.Chars(0) = "u"c) Then
Console.WriteLine(str)
End If
End Sub
' Display a string if it starts with a vowel.
Public Shared Sub VowelStart(ByVal str As String)
If (str.Chars(0) = "a"c Or str.Chars(0) = "e"c Or str.Chars(0) = "i"c _
Or str.Chars(0) = "o"c Or str.Chars(0) = "u"c) Then
Console.WriteLine(str)
End If
End Sub
End Class
' Demonstrate the use of delegates, including the Remove and
' Combine methods to create and modify delegate combinations.
Class Test
Public Shared Sub Main()
' Declare the StringContainer class and add some strings
Dim container As 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.
Dim constart As StringContainer.CheckAndPrintDelegate = AddressOf StringExtensions.ConStart
Dim vowelStart As StringContainer.CheckAndPrintDelegate = AddressOf StringExtensions.VowelStart
' Get the list of all delegates assigned to this MulticastDelegate instance.
Dim delegateList() As [Delegate] = conStart.GetInvocationList()
Console.WriteLine("conStart contains {0} delegate(s).", delegateList.Length)
delegateList = vowelStart.GetInvocationList()
Console.WriteLine("vowelStart contains {0} delegate(s).", delegateList.Length)
Console.WriteLine()
' Determine whether the delegates are System.Multicast delegates
If TypeOf conStart Is System.MulticastDelegate And TypeOf vowelStart Is System.MulticastDelegate Then
Console.WriteLine("conStart and vowelStart are derived from MulticastDelegate.")
Console.WriteLine()
End If
' Run the two single delegates one after the other.
Console.WriteLine("Executing the conStart delegate:")
container.DisplayAllQualified(conStart)
Console.WriteLine("Executing the vowelStart delegate:")
container.DisplayAllQualified(vowelStart)
Console.WriteLine()
' Create a new MulticastDelegate and call Combine to add two delegates.
Dim multipleDelegates As StringContainer.CheckAndPrintDelegate =
CType([Delegate].Combine(conStart, vowelStart),
StringContainer.CheckAndPrintDelegate)
' How many delegates does multipleDelegates contain?
delegateList = multipleDelegates.GetInvocationList()
Console.WriteLine("{1}multipleDelegates contains {0} delegates.{1}",
delegateList.Length, vbCrLf)
' Pass this mulitcast delegate to DisplayAllQualified.
Console.WriteLine("Executing the multipleDelegate delegate.")
container.DisplayAllQualified(multipleDelegates)
' Call remove and combine to change the contained delegates.
multipleDelegates = CType([Delegate].Remove(multipleDelegates, vowelStart),
StringContainer.CheckAndPrintDelegate)
multipleDelegates = CType([Delegate].Combine(multipleDelegates, conStart),
StringContainer.CheckAndPrintDelegate)
' Pass multipleDelegates to DisplayAllQualified again.
Console.WriteLine()
Console.WriteLine("Executing the multipleDelegate delegate with two conStart delegates:")
container.DisplayAllQualified(multipleDelegates)
End Sub
End Class
' 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
Megjegyzések
MulticastDelegate egy különleges osztály. A fordítók és más eszközök ebből az osztályból származhatnak, de explicit módon nem származtathatók belőle. Ugyanez igaz az Delegate osztályra is.
A delegált típusok által öröklő MulticastDelegatemetódusok mellett a közös nyelvi futtatókörnyezet két speciális módszert is kínál: BeginInvoke és EndInvoke. További információ ezekről a metódusokról: Szinkron metódusok aszinkron meghívása.
A MulticastDelegate meghatalmazottak csatolt listája, úgynevezett meghívási lista, amely egy vagy több elemből áll. Csoportos küldésű meghatalmazott meghívása esetén a meghívási listában szereplő meghatalmazottak szinkron módon lesznek meghívva abban a sorrendben, amelyben megjelennek. Ha a lista végrehajtása során hiba történik, a rendszer kivételt jelez.
Konstruktorok
| Name | Description |
|---|---|
| MulticastDelegate(Object, String) |
Inicializálja a MulticastDelegate osztály új példányát. |
| MulticastDelegate(Type, String) |
Inicializálja a MulticastDelegate osztály új példányát. |
Tulajdonságok
| Name | Description |
|---|---|
| HasSingleTarget |
Egy olyan értéket kap, amely jelzi, hogy a Delegate hívási cél egyetlen-e. (Öröklődés forrása Delegate) |
| Method |
Lekéri a meghatalmazott által képviselt metódust. (Öröklődés forrása Delegate) |
| Target |
Lekéri azt az osztálypéldányt, amelyre az aktuális meghatalmazott meghívja a példánymetódust. (Öröklődés forrása Delegate) |
Metódusok
| Name | Description |
|---|---|
| Clone() |
Létrehozza a meghatalmazott sekély másolatát. (Öröklődés forrása Delegate) |
| CombineImpl(Delegate) |
Ezt Delegate kombinálja a megadottakkal Delegate , hogy új meghatalmazottat alakítson ki. |
| DynamicInvoke(Object[]) |
Dinamikusan meghívja (későn kötött) az aktuális meghatalmazott által képviselt metódust. (Öröklődés forrása Delegate) |
| DynamicInvokeImpl(Object[]) |
Feldolgozza a teljes meghívási listát. |
| DynamicInvokeImpl(Object[]) |
Dinamikusan meghívja (későn kötött) az aktuális meghatalmazott által képviselt metódust. (Öröklődés forrása Delegate) |
| Equals(Object) |
Meghatározza, hogy ez a csoportos küldési delegált és a megadott objektum egyenlő-e. |
| GetHashCode() |
A példány kivonatkódját adja vissza. |
| GetInvocationList() |
A csoportos küldési meghatalmazott meghívási listáját adja vissza meghívási sorrendben. |
| GetMethodImpl() |
Az aktuális MulticastDelegateáltal képviselt metódust adja vissza. |
| GetMethodImpl() |
Lekéri az aktuális meghatalmazott által képviselt metódust. (Öröklődés forrása Delegate) |
| GetObjectData(SerializationInfo, StreamingContext) |
Elavult.
Feltölt egy SerializationInfo objektumot a példány szerializálásához szükséges összes adattal. |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| RemoveImpl(Delegate) |
Eltávolít egy elemet a meghívási MulticastDelegate listából, amely megegyezik a megadott meghatalmazottval. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
Operátorok
| Name | Description |
|---|---|
| Equality(MulticastDelegate, MulticastDelegate) |
Meghatározza, hogy két MulticastDelegate objektum egyenlő-e. |
| Inequality(MulticastDelegate, MulticastDelegate) |
Meghatározza, hogy két MulticastDelegate objektum nem egyenlő-e. |
Bővítő metódusok
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Lekéri a megadott meghatalmazott által képviselt metódust képviselő objektumot. |