繁体   English   中英

代表如何指向方法?

[英]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(); 然后在堆上分配内存,初始化所需的内容,最后将地址放入变量some​​Employee。

然后,堆中的内容就是一个雇员拥有的数据 就像我们过去经常看到的那样,不难理解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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM