中间语言代码中顶级 class 的访问说明符是什么?

what is the access specifier of the top level class in the intermediate language code?

c# 中顶层 类 的默认访问说明符是内部的 但是当我观察 IL 代码时,它如下

.class private auto ansi beforefieldinit n.A
   extends [System.Runtime]System.Object
{
} // end of class n.A

为什么编译器在上述 IL 代码中使用 private 关键字而不是 assembly 关键字?

IL 的定义与 C# 不同;在 IL 中有 visibilityaccessibility。详细信息在 ECMA 335 的 II.10.1 和 table II.10.1.1 中。顶级类型的唯一两个有效选项是 publicprivate - 其他一切都相关到 nested *,即类型中的类型。

基本上,它是这样做的 因为规范要求它:

A type that is not nested inside another type shall have exactly one visibility (private or public) and shall not have an accessiblity.

顶级类型没有 assemblyfamily 这样的东西。