7

例如:

internal class C
{
    public void M()
    {
        Console.WriteLine("foo");
    }
}

对我来说,这就是“一种任何人都可以访问的方法,无论程序集是否存在于只能从同一程序集中的代码中访问的类中”。

我对编译器的经验告诉我,如果我做了类似的事情并且没有收到警告,那么可能有一个正当的理由来拥有它。

所以,我想要么

  1. 我对保护级别的理解有些欠缺。
  2. 可能会有警告,但没有警告。

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

4

4 回答 4

10

对我来说,这就是“一种任何人都可以访问的方法,无论程序集是否存在于只能从同一程序集中的代码中访问的类中”。

对我来说,这意味着“C 的可访问域仅限于此程序集;M的可访问域是其容器 C 的可访问域的不受限制的子集”。

"public" means that to me because that's what the specification says it means. I encourage you to read the portion of the specification which covers accessibility domains if you have questions or concerns about this.

于 2012-04-30T21:52:08.043 回答
5

internal关键字将限制M()对仅在C驻留程序集中进行的调用的访问。

public只是意味着任何人都可以访问该成员。public不知道也不关心在类层次结构中对它施加的限制,也不应该这样做。

换句话说,这是“设计使然”。当你添加public一个方法时,编译器假设你已经知道,如果你对类本身施加更多的限制,那么你必须知道你在做什么。

于 2012-04-30T21:07:34.417 回答
5

有关其功能的详细答案,请参阅此SO Question

根据我的经验,我喜欢将内部成员标记为公开,以期将来我想将课程的范围更改为公开。这样我就可以做到这一点,并且所有以前标记的内部方法都是自动公开的。

于 2012-04-30T21:08:30.513 回答
2

类的范围是内部的,因此虽然拥有公共属性似乎没有意义,但只有那些也在名称空间中的类才能看到类以查看属性。如果在某个时候您决定公开该课程,那将是一个庞大的 PIA 来检查每个成员并更改其范围。

于 2012-04-30T21:10:42.030 回答