67

有什么区别:

namespace Library{
    class File{
        //code inside it
   }
}

和:

namespace Library{
   public class File{
       //code inside it
   }
}

那么public classclass有什么区别呢?

4

3 回答 3

73

不指定public类是隐式的internal。这意味着该类仅在同一程序集中可见。当您指定public时,该类在程序集外可见。

还允许internal显式指定修饰符:

internal class Foo {}
于 2012-09-12T16:48:36.587 回答
24

前者相当于:

namespace Library{
    internal class File{
        //code inside it
   }
}

所有可见性默认为尽可能不可见 -private对于classes 和structs 的成员(方法、属性、字段、嵌套类和嵌套enums)以及 sinternal的直接成员namespace,因为它们不能是私有的。

internal意味着同一个程序集中的其他代码可以看到它,但没有别的(除非朋友程序集和使用反射)。

这有两个原因:

  1. 无论如何,您应该有意识地使事物尽可能少地使用可见性,以加强您的封装。
  2. 如果他们默认public您,可能会意外地公开一些应该是私有的或内部的。如果你不小心使某些东西不够可见,你会得到一个明显的编译错误并修复它。如果你不小心让某些东西太显眼,你就会在你的代码中引入一个不会被标记为错误的缺陷,这将是一个需要稍后修复的重大更改。

通常认为更好的风格是使用访问修饰符明确,在代码中更清晰,就是发生了什么。

于 2012-09-12T16:55:37.210 回答
1

默认情况下,所有classes (以及所有类型)都是internal,所以为了让它们可以从外部访问(没有类似的东西InternalsVisibleToAttribute),你必须public明确地制作它们。

于 2012-09-12T16:48:26.427 回答