[英]How can delegates point to methods?
在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时,某些雇员; 运行时会在堆栈上分配足够的内存,以容纳用于保存Employee数据的一部分堆的地址。 该行someEmployee = new Employee(); 然后在堆上分配内存,初始化所需的内容,最后将地址放入变量someEmployee。
然后,堆中的内容就是一个雇员拥有的数据 。 就像我们过去经常看到的那样,不难理解someEmployee拥有对内存中有数据的引用。
现在,一个委托指向一个方法。 但这意味着什么? 指一种方法意味着什么? 方法是否像其他数据一样保存在堆中? 这使我感到困惑,因为方法不仅是一堆数据,而是一堆指令,那么存储指令应该是什么意思?
您可以将代表视为这样
public class Action : Delegate
{
private object instance;
private MethodInfo method;
public void Invoke()
{
method.Invoke(instance, new object[]{});
}
}
现在,显然,这并不完全是这样,并且有很多语法糖和直接的运行时支持等,但这应该使您对发生的事情有所了解。 委托只是一个类型,很像一个类。 这将导致在堆上分配内存,以表示一个方法和一个调用它的(可选)实例,并且键入为委托的变量将保留对此对象的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.