多播委托的内存分配
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);
。从中你可以弄清楚内存是如何分配的——它是常规对象的实例化。
我正在阅读有关多播委托的内容,但内存分配的想法让我停了下来。 有人可以解释多播委托的内存分配是如何完成的吗?(我故意不添加任何事件以使我更容易理解) 在这个程序中:
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);
。从中你可以弄清楚内存是如何分配的——它是常规对象的实例化。