【发布时间】:2021-04-28 21:10:53
【问题描述】:
我知道委托的声明是这样的:
public delegate int PerformCalculation(int x, int y);
但是,肯定还有更多事情要做。委托的目的是提供一个指向方法的指针,并在委托中封装对方法的引用。
这个引用保存在什么样的结构中(在委托内部)?我也知道您可以在委托中封装对多个方法的引用。这是否意味着委托中有一个数组来保存这些?
此外,委托中定义了哪些方法等。当您使用简洁声明委托时真正发生了什么:
public delegate int PerformCalculation(int x, int y);
?
编辑: 一些澄清。当您声明一个委托时,编译器会自动为您创建一个继承自 System.MulticastDelegate 的 密封 类。如果您使用 ildasm 查看您的程序集,您可以看到这一点。这整齐。基本上,通过一个语句,您将在编译时为您生成一个全新的类,它具有您需要的所有功能。
【问题讨论】:
-
你可以用反射器检查很多。缺少一些部分,因为它们需要运行时魔法。但是您仍然会看到单个和多播代表的大部分内容。
标签: c# .net delegates implementation internal