多播委托的内存分配

时间:2015-08-18 09:14:29

标签: c# delegates

我正在阅读有关多播委托的内容,并且内存分配的想法阻止了我。 有人可以解释如何完成多播委托的内存分配。(我故意没有添加任何事件让我更容易理解) 在这个计划中:

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。它是否具有addNum或MultNum的大小或两者的大小?

MyThoughts - 编译器将为Mydelegate分配一些内存(我不知道多少)并将其存储在缓存中。然后将根据方法(ADD)分配内存,然后删除和然后再通过委托调用时按照乘法方法再分配内存。 我理解正确吗?

1 个答案:

答案 0 :(得分:1)

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