gpt4 book ai didi

c# - 委托(delegate)如何指向方法?

转载 作者:太空宇宙 更新时间:2023-11-03 20:10:08 24 4
gpt4 key购买 nike

在 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;运行时在堆栈上分配足够的内存来保存保存 Employee 数据的堆的地址。行 someEmployee = new Employee();然后在堆上分配内存,初始化所需的内容,最后将地址放在变量 someEmployee 上。

堆上的内容是 Employee 拥有的数据。很容易理解,someEmployee 持有对一段内存的引用,内存中有我们习惯看到的数据。

现在,一个委托(delegate)指向一个方法。但这意味着什么呢?指向一个方法应该是什么意思?一个方法像其他数据一样保存在堆中?这让我很困惑,因为一个方法不仅仅是一堆数据,它是一堆指令,那么存储指令应该是什么意思?

最佳答案

你可以把委托(delegate)想象成这样

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

现在,很明显,这并不是真正的样子,并且有很多语法糖和直接运行时支持等,但这应该让您对正在发生的事情有一些了解。委托(delegate)只是一种类型,很像一个类。它将导致在堆上分配内存以表示一个方法和一个(可选的)实例来调用它,并且类型为委托(delegate)的变量持有对该对象的引用。

关于c# - 委托(delegate)如何指向方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com