其中是委托类中调用方法的声明
本文关键字:方法 声明 调用 | 更新日期: 2023-09-27 18:19:22
我试图挖掘委托类的声明 Invoke
方法,但我没有找到它!它到底在哪里?!!
要检查此条件,请复制以下代码:
public class Program
{
public delegate void LogDel(string msg);
private static void Main(string[] args)
{
var logger = new LogDel(Logger);
var msg = "hi";
logger.Invoke(msg);
logger(msg);
}
public static void Logger(string logMsg)
{
Console.WriteLine(logMsg);
}
}
当您创建委托时,编译器在编译时生成一个继承MulticastDelegate
的类,并向该类添加三个方法:BeginInvoke
, EndInvoke
和Invoke
。您可以使用using ILSpy和类似的工具轻松看到它。
这就是为什么你不能看到它,而在Delegate
类
MSDN必须这样说:
MulticastDelegate是一个特殊的类。编译器和其他工具可以从这个类派生,但不能显式地派生。Delegate类也是如此。
除了委托类型从MulticastDelegate继承的方法之外,公共语言运行库还提供了两个特殊的方法:BeginInvoke和EndInvoke。
MulticastDelegate有一个委托链表,称为调用列表,由一个或多个元素组成。当调用多播委托时,调用列表中的委托将按照它们出现的顺序同步调用。如果在列表执行期间发生错误,则抛出异常