当我们在c#中声明一个委托时,内存会发生什么?

时间:2015-03-28 06:44:51

标签: c#

委托方法或类? 如果它是一种方法,那我们怎么能实例化呢? 只有类可以实例化 所以代表必须上课 请帮我 由于这个原因,我有点困惑 委托存储在堆或堆栈中的位置?

4 个答案:

答案 0 :(得分:1)

Delegate是一个类型安全指针,指向您的方法/函数。这意味着您可以使用委托将方法/函数作为参数传递,并且对于类型也是安全的。

有关详情,请查看this链接

答案 1 :(得分:1)

委托是一种引用类型,与类相同,因此存储在堆上。 将代表视为"堆栈"引用,包含函数/方法签名。

答案 2 :(得分:0)

委托在概念上是类型,但它被定义并充当一个类(具有MethodInfo属性,实例 - 或目标 - 以及一些方法 - 和运行时信息等.-)。

它定义了一个方法签名。要实例化它,你需要将它与一个方法相关联(因此它基本上是语法糖来引用带有显式签名的方法)。

它还有一个Invoke方法,该方法由运行时关联的MethodInfo的签名定义。

答案 3 :(得分:0)

Delegate只是一个类,它类似于在堆上分配内存的类和一个调用它的实例。委托变量保存对该对象的引用。

这样的东西
        public class SomeAction : Delegate
        {
              private object _instance;
              private MethodInfo _method;
              public void Invoke()
              {
                //Invoke
              }
          }

不完全像这样,但类似于它