根据 ECMA-335 第 6 版
I.8.5.3.2 成员和嵌套类型的可访问性:
一般来说,类型的成员可以具有任意一种可访问性 分配给它的规则。然而,有三个例外:
- 由嵌套类型定义的成员,或由嵌套类型包围的嵌套类型,不应具有比嵌套类型更大的可访问性 定义它的类型(在成员的情况下)或嵌套类型 包围它(在嵌套类型的情况下)。
这应该会阻止我在 C# 中编写这样的代码
internal class EnclosingType
{
private class NestedType
{
public int publicField;
}
}
...但事实并非如此。它成功编译成这样:
.class /* 02000006 */ nested private auto ansi beforefieldinit NestedType
extends [System.Runtime]System.Object
{
// Fields
.field /* 04000001 */ public int32 publicField
...
我在 ECMA-335 CLI 规范附录中找不到任何与此相关的内容。
我是否误读了规范,或者是否有官方记录的理由?
如果您认为“公共”总是比“私人”更易于访问,那么您就被误解了。本标准并未对这 7 条无障碍规则进行排名。
正如您引用的章节开头所提到的,可访问性是基于以下因素决定的:
在成员或类型上声明的可访问性属性并不代表其可访问性。