内部班级的公共成员是什么意思?

Aar*_*ide 7 c# class internal

例如:

internal class C
{
    public void M()
    {
        Console.WriteLine("foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这是一个 " 任何人都可以访问的方法,无论生成在只能从同一程序集中的代码访问的类中的程序集 ".

我对编译器的经验告诉我,如果我做了类似的事情并且没有得到警告,那么可能有一个合理的理由.

所以,我想也是

  1. 我对保护水平的理解缺乏一些东西.
  2. 可能会有警告,但没有警告.

(如果是2,这不是试图抱怨它 - 我只想了解)

Eri*_*ert 10

对我来说,这是一个"任何人都可以访问的方法,无论生成在只能从同一程序集中的代码访问的类中的程序集".

对我来说,这意味着"C的可访问性域仅限于此程序集; M 的可访问性域是其容器的可访问域无限制子集,C ".

"公共"对我来说就是因为这就是规范所说的意思.如果您对此有疑问或担忧,我建议您阅读涵盖可访问域的规范部分.


Rob*_*vey 5

internal关键字即将接入限制M()到仅在装配中进行的呼叫C驻留.

public只是意味着任何人都可以访问该成员 public我不知道或关心在类层次结构中更高的限制,也不应该关心.

换句话说,它是"按设计".当你public加入一个方法时,编译器假定你已经知道,如果你对类本身施加了进一步的限制,那么你必须知道你在做什么.

  • 因为`public`只是意味着任何人都可以访问该成员.`public`不知道或关心在类层次结构中更高的限制,也不应该. (2认同)

Ste*_*ner 5

有关其功能的详细解答,请参阅此SO问题.

根据我的经验,我希望将内部成员公之于众,以期在将来我希望将课程范围更改为公开时​​.这样我可以做到这一点,所有以前标记的内部方法都会自动公开.

  • 对,就是这样.当你可以改变*one*并完成同样的事情时,为什么你必须改变你班级中的每个访问修饰符. (3认同)