Multicast delegate C#

后端 未结 3 1558
栀梦
栀梦 2021-02-10 16:20

Am studying about delegates. As I read. I learned that adding more than one function in a delegate is called multicast delegate. Based on that I wrote a program. Here two functi

相关标签:
3条回答
  • 2021-02-10 16:51

    Multicast delegates is one of the feature of delegates, it wraps the reference of multiple methods and calls it sequentially and it is also known as Delegate Chaining.

    Below is the example of multicast delegates.

        // Declare Delegates
    public delegate void MultiCast(int num1, int num2);
    
    class Program
    {
        public void Add(int num1, int num2)
        {
            Console.WriteLine(num1 + num2);
        }
        public  void Sub(int num1, int num2)
        {
            Console.WriteLine(num1 - num2);
        }
        public  void Mul(int num1, int num2)
        {
            Console.WriteLine(num1 * num2);
        }
    
        static void Main(string[] args)
        {
            MultiCast del1, del2, del3, multAddDel, multSubDel;
            del1 = new Program().Add;
            del2 = new Program().Sub;
            del3 = new Program().Mul;
    
        //`There are three ways to define the multicast delegate.`
    
            //1 way
    
            //Adding delegates 
            multAddDel = del1 + del2 + del3;
            multAddDel(10, 10);
            //Removing Delegates
            multSubDel = multAddDel - del3;
            multSubDel(10, 10);
    
            Console.WriteLine();
            Console.WriteLine("Second Way");
    
            //2 way
    
            MultiCast multAddDel1 = null;
            //Adding delegates 
            multAddDel1 += del1;
            multAddDel1 += del2;
            multAddDel1 +=  del3;
            multAddDel1(10, 10);
            //Removing Delegates
            multAddDel1 -= del3;
            multAddDel1(10, 10);
    
            Console.WriteLine();
            Console.WriteLine("Third Way");
    
            //3 way
    
            MultiCast multAddDel2 = null;
            //Adding delegates 
            multAddDel2 = (MultiCast)Delegate.Combine(multAddDel2, del1);
            multAddDel2 = (MultiCast)Delegate.Combine(multAddDel2, del2);
            multAddDel2 = (MultiCast)Delegate.Combine(multAddDel2, del3);
            multAddDel2(10, 10);
    
            //Removing Delegates
            multAddDel2 = (MultiCast)
                Delegate.Remove(multAddDel2, del3);
    
            multAddDel2(10, 10);
            Console.ReadLine();
        }
    }
    
    0 讨论(0)
  • 2021-02-10 16:55

    Yes, it's an example of a multicast delegate. Note that instead of

    new MyDelegate(AddNumbers)
    

    you can typically say just

    AddNumbers
    

    because a so-called method group conversion exists that will create the delegate instance for you.

    Another thing to note is that your declaration public delegate void MyDelegate(int a, int b); does not have to reside inside another type (here inside the MainPage class). It could be a direct member of the namespace (since it's a type). But of course it's perfectly valid to "nest" it inside a class, as you do, for reasons similar to the reason why you create nested classes.

    0 讨论(0)
  • 2021-02-10 17:06

    Actually all delegates in C# are MulticastDelegates, even if they only have a single method as target. (Even anonymous functions and lambdas are MulticastDelegates even though they by definition have only single target.)

    MulticastDelegate is simply the base class for all kinds of function or method references in C#, whether they contain one or more targets.

    So this:

    MyDelegate myDel = new MyDelegate(AddNumbers);
    

    Sets myDel to a MulticastDelegate with a single target. But this line:

    myDel += new MyDelegate(MultiplyNumbers);
    

    Updates myDel to a MulticastDelegate with two targets.

    0 讨论(0)
提交回复
热议问题