Cara menggabungkan delegasi (Delegasi Multicast) (Panduan Pemrograman C#)

Contoh ini menunjukkan cara membuat delegasi multicast. Properti objek delegasi yang berguna adalah Anda dapat menetapkan beberapa metode ke satu instans delegasi dengan menggunakan + operator. Delegasi multicast berisi daftar delegasi yang telah dialokasikan. Saat Anda memanggil delegasi multicast, delegasi tersebut mengeksekusi daftar delegasi secara berurutan. Anda hanya dapat menggabungkan delegasi dengan jenis yang sama. Anda dapat menggunakan operator - untuk menghapus delegasi komponen dari delegasi multicast.

using System;


namespace DelegateExamples;

// Define a custom delegate that has a string parameter and returns void.
delegate void CustomCallback(string s);

class TestClass
{
    // Define two methods that have the same signature as CustomCallback.
    static void Hello(string s)
    {
        Console.WriteLine($"  Hello, {s}!");
    }

    static void Goodbye(string s)
    {
        Console.WriteLine($"  Goodbye, {s}!");
    }

    static void Main()
    {
        // Declare instances of the custom delegate.
        CustomCallback hiDel, byeDel, multiDel, multiMinusHiDel;

        // In this example, you can omit the custom delegate if you
        // want to and use Action<string> instead.
        //Action<string> hiDel, byeDel, multiDel, multiMinusHiDel;

        // Initialize the delegate object hiDel that references the
        // method Hello.
        hiDel = Hello;

        // Initialize the delegate object byeDel that references the
        // method Goodbye.
        byeDel = Goodbye;

        // The two delegates, hiDel and byeDel, are combined to
        // form multiDel.
        multiDel = hiDel + byeDel;

        // Remove hiDel from the multicast delegate, leaving byeDel,
        // which calls only the method Goodbye.
        multiMinusHiDel = (multiDel - hiDel)!;

        Console.WriteLine("Invoking delegate hiDel:");
        hiDel("A");
        Console.WriteLine("Invoking delegate byeDel:");
        byeDel("B");
        Console.WriteLine("Invoking delegate multiDel:");
        multiDel("C");
        Console.WriteLine("Invoking delegate multiMinusHiDel:");
        multiMinusHiDel("D");
    }
}
/* Output:
Invoking delegate hiDel:
  Hello, A!
Invoking delegate byeDel:
  Goodbye, B!
Invoking delegate multiDel:
  Hello, C!
  Goodbye, C!
Invoking delegate multiMinusHiDel:
  Goodbye, D!
*/

Nota

Anda dapat menambahkan delegasi yang sama ke delegasi multicast beberapa kali. Saat Anda memanggil delegasi multicast, delegasi tersebut memanggil semua delegasi dalam daftar, termasuk duplikat. Saat Anda menghapus delegat dari delegasi multicast, entri yang paling cocok ke kanan akan dihapus, jadi hanya satu instance yang dihapus jika ada beberapa salinan.

Baca juga