什么要求嵌套类型的成员比嵌套类型具有更高的可访问性

问题描述 投票:0回答:1

根据 ECMA-335 第 6 版

I.8.5.3.2 成员和嵌套类型的可访问性:

一般来说,类型的成员可以具有任意一种可访问性 分配给它的规则。然而,有三个例外

  1. 由嵌套类型定义的成员,或由嵌套类型包围的嵌套类型,不应具有比嵌套类型更大的可访问性 定义它的类型(在成员的情况下)或嵌套类型 包围它(在嵌套类型的情况下)。

这应该会阻止我在 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 规范附录中找不到任何与此相关的内容。

我是否误读了规范,或者是否有官方记录的理由?

c# .net nested
1个回答
0
投票

如果您认为“公共”总是比“私人”更易于访问,那么您就被误解了。本标准并未对这 7 条无障碍规则进行排名。

正如您引用的章节开头所提到的,可访问性是基于以下因素决定的:

  1. 被引用成员的静态可见类型。
  2. 进行参考的类型和组件。

在成员或类型上声明的可访问性属性并不代表其可访问性。

© www.soinside.com 2019 - 2024. All rights reserved.