多播委托的内存分配

Memory Allocation of Multicast delegate

我正在阅读有关多播委托的内容,但内存分配的想法让我停了下来。 有人可以解释多播委托的内存分配是如何完成的吗?(我故意不添加任何事件以使我更容易理解) 在这个程序中:

using System;

delegate int MyDelegate(int a,int b);
namespace DelegateAppl
{
    class DelegateTest
    {

        public static int AddNum(int p,int q)
        {
          int  add = p + q;
          return add;
        }

        public static int MultNum(int p, int q)
        {
            int mul = p * q;
            return mul;
        }


        static void Main(string[] args)
        {
            MyDelegate myDel = new MyDelegate(AddNum);
            myDel += new MyDelegate(MultNum);


            int result = myDel(2, 5);
           Console.WriteLine("Value of Num: {0}", result);

            Console.ReadKey();
        }
    }
}

Mydelegate 会怎样 allocated.Will 它的大小为 addNum 或 MultNum 或两者相加?

MyThoughts-编译器将分配一些内存(我不知道多少)给 Mydelegate 并将其存储在 cache.It 然后将根据方法分配内存(ADD) 然后删除,然后在通过委托调用时按照 Multiply 方法再次分配内存。 我的理解对吗?

委托被编译为私有密封 class(包含 class),这是对您隐藏的 - 它是在编译期间生成的。每次你初始化一个委托,比如 MyDelegate myDel = new MyDelegate(AddNum);,你实际上是在初始化那个隐藏的 class 的实例。 class 还包含一个名为 _invocationList 的字段,类型为 System.Object,用于引用另一个委托,并通过 Delegate.Combine(Delegate that, Delegate other) 分配,这就是当你写 myDel += new MyDelegate(MultNum);。从中你可以弄清楚内存是如何分配的——它是常规对象的实例化。