c# - 为什么本地函数具有“内部”访问修饰符?
问题描述
为什么 Roslyn 编译器使用internal
访问修饰符(在 IL 中assembly
)而不是生成本地函数private
?
private void M()
{
bool f = true;
bool x1() => f;
static bool x2() => true;
}
.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 { ... }
局部函数是嵌套在另一个成员中的一种类型的私有方法。
因为所有本地函数都是私有的,包括访问修饰符,例如 private 关键字,会生成编译器错误 CS0106
解决方案
看起来像代码重用工件。Roslyn 可能使用相同的代码来处理本地函数和 lambda,但在不同的类中注入方法定义。
在 lambda 的情况下,它将 lambda 主体注入到生成的闭包 ( DisplayClass
) 类中,并且它应该是内部的,可以从调用函数中引用。
推荐阅读
- azure - 从 Asp.Net Core 中的 URL 中删除附加斜杠
- vulkan - 没有命令缓冲区的提交队列是否有效?
- javascript - 即使生成了 meta.json 也无法通过代码自动清除缓存 react-clear-cache 包
- java - 在这种情况下,有没有办法用正则表达式找到特殊的子字符串?
- php - 在管理员中使用带有动态内容的 wordpress 厚框
- typescript - 在另一个包上使用类型声明
- go - 生成 micro-go 代码时出错 - --go_out: protoc-gen-go: unknown plugin "micro"
- python - Discord.py 不响应文字命令
- java - 弹簧靴 | 自动装配 CloseableHttpClient 失败 NoSuchBeanDefinitionException
- laravel-5 - 从控制器异步运行命令