代表们如何指出方法?

use*_*696 1 .net c# delegates memory-management

在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
     }
}
Run Code Online (Sandbox Code Playgroud)

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

然后堆上的内容就是Employee拥有的数据.很容易理解someWmployee持有对我们以前看到的包含数据的内存片段的引用.

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

Ser*_*rvy 5

您可以将委托视为这样的事情

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

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