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

时间:2012-04-30 21:05:14

标签: c# class internal

例如:

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

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

我对编译器的经验告诉我,如果我做了类似的事情并且没有得到警告,那么可能有正当理由这样做。

所以,我想是

  1. 我对防护等级的理解缺乏一些东西。
  2. 可能会有警告,但没有警告。
  3. (如果是2,这不是试图抱怨它 - 我只是想了解)

4 个答案:

答案 0 :(得分:10)

  

对我来说,这是一个任何人都可以访问的方法,无论是否只能从同一个程序集中的代码访问的类中的程序集都可以访问#。;

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

"公共"对我来说意味着因为规范所说的意味着。如果您对此有疑问或担忧,我建议您阅读规范中涵盖可访问性域的部分。

答案 1 :(得分:5)

internal关键字会将对M()的访问限制为仅限C所在的程序集内的调用。

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

换句话说,它是“按设计”。当你在方法上放置public时,编译器会假设你已经知道,如果你对类本身施加了进一步的限制,那么你必须知道你在做什么。

答案 2 :(得分:5)

有关其运作方式的详细解答,请参阅此SO Question

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

答案 3 :(得分:2)

类的范围是内部的,所以虽然拥有公共属性似乎没有意义,因为只有名称空间中的那些类才能看到类来查看属性。如果在某个时候你决定公开上课,那么通过每个成员并改变它的范围将是一个巨大的PIA。