代表们如何指出方法?

时间:2013-12-13 17:50:08

标签: c# .net memory-management delegates

在C#中,我们有值类型和引用类型。我很清楚一些像

这样的代码
public class Employee
{
   // Code for Employee goes here 
}

public class Program
{
     public void Main(string[] args)
     {
          Employee someEmployee;
          someEmployee = new Employee();
          // Do something with someEmployee
     }
}

当我们做员工一些员工时;运行时在堆栈上分配内存足以保存保存Employee数据的堆的地址。 someEmployee = new Employee();然后在堆上分配内存,初始化所需的内容,最后将地址放在变量some​​Employee上。

堆上的内容是员工拥有的数据。很容易理解someEmployee持有对我们习惯看到的包含数据的内存的引用。

现在,代理人指向一个方法。但这意味着什么?什么意思指向一种方法?一个方法像其他数据一样保存在堆中?这让我感到困惑,因为一个方法不仅仅是一堆数据,而是一堆指令,那么存储指令应该是什么意思呢?

1 个答案:

答案 0 :(得分:5)

您可以将委托视为此类

public class Action : Delegate
{
    private object instance;
    private MethodInfo method;
    public void Invoke()
    {
        method.Invoke(instance, new object[]{});
    }
}

现在,很明显,这不完全是那样的,并且有很多语法糖和直接的运行时支持等等,但这应该会让你对发生了什么有所了解。委托只是一种类型,就像一个类。它将导致堆上的内存分配表示一个方法和一个(可选)实例来调用它,并且作为委托键入的变量保存对该对象的引用。