.NET中委托性能的演变,其发展历程中哪些细节构成了效应?

摘要:## .NET中的委托 .NET中的委托是一项重要功能,可以实现间接方法调用和函数式编程。 自.NET Framework 1.0起,委托在.NET中就支持多播(multicast)功能。通过多播,我们可以在单个委托调用中调用一系列方法,而
.NET中的委托 .NET中的委托是一项重要功能,可以实现间接方法调用和函数式编程。 自.NET Framework 1.0起,委托在.NET中就支持多播(multicast)功能。通过多播,我们可以在单个委托调用中调用一系列方法,而无需自己维护方法列表。 即使在今天,委托的多播功能在桌面开发中仍然发挥着至关重要的作用。 让我们通过一个例子快速了解一下。 delegate void FooDelegate(int v); class MyFoo { public FooDelegate? Foo { get; set; } public void Process() { Foo?.Invoke(42); } } 我们简单地定义了一个带有单个参数v的委托,并在方法Process中调用了该委托。 要使用上面的代码,我们需要将一些目标添加到委托成员Foo中。 var obj = new MyFoo(); obj.Foo += v => Console.WriteLine(v); obj.Foo += v => Console.WriteLine(v + 1); obj.Foo += v => Console.WriteLine(v - 42); obj.Process(); 然后我们会得到如下预期的输出。 42 43 0 但是,在幕后发生了什么? 实际上,编译器会自动将我们的lambda表达式转换为方法,并使用静态字段缓存创建的委托,如下所示。
阅读全文