为什么 Roslyn 编译器生成带有internal访问修饰符(在 IL 中,assembly)而不是 的本地函数private?
private void M()
{
bool f = true;
bool x1() => f;
static bool x2() => true;
}
Run Code Online (Sandbox Code Playgroud)
.method assembly hidebysig static
bool '<M>g__x1|0_0' (
valuetype C/'<>c__DisplayClass0_0'& ''
) cil managed { ... }
.method assembly hidebysig static
bool '<M>g__x2|0_1' () cil managed { ... }
Run Code Online (Sandbox Code Playgroud)
文档说它应该是私有的: https: //learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/local-functions
本地函数是嵌套在另一个成员中的类型的私有方法。
由于所有本地函数都是私有的,包括访问修饰符(例如 private 关键字),会生成编译器错误 CS0106
看起来像是代码重用神器。Roslyn 可能使用相同的代码来处理本地函数和 lambda,但在不同的类中注入方法定义。
在 lambda 的情况下,它将 lambda 主体注入生成的闭包 ( DisplayClass) 类,并且它应该是内部的,以便从调用函数中引用。
| 归档时间: |
|
| 查看次数: |
332 次 |
| 最近记录: |