在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();然后在堆上分配内存,初始化所需的内容,最后将地址放在变量someEmployee上。
堆上的内容是员工拥有的数据。很容易理解someEmployee持有对我们习惯看到的包含数据的内存的引用。
现在,代理人指向一个方法。但这意味着什么?什么意思指向一种方法?一个方法像其他数据一样保存在堆中?这让我感到困惑,因为一个方法不仅仅是一堆数据,而是一堆指令,那么存储指令应该是什么意思呢?
答案 0 :(得分:5)
您可以将委托视为此类
public class Action : Delegate
{
private object instance;
private MethodInfo method;
public void Invoke()
{
method.Invoke(instance, new object[]{});
}
}
现在,很明显,这不完全是那样的,并且有很多语法糖和直接的运行时支持等等,但这应该会让你对发生了什么有所了解。委托只是一种类型,就像一个类。它将导致堆上的内存分配表示一个方法和一个(可选)实例来调用它,并且作为委托键入的变量保存对该对象的引用。