有什么区别:
namespace Library{
class File{
//code inside it
}
}
和:
namespace Library{
public class File{
//code inside it
}
}
那么public class和class有什么区别呢?
不指定public
类是隐式的internal
。这意味着该类仅在同一程序集中可见。当您指定public
时,该类在程序集外可见。
还允许internal
显式指定修饰符:
internal class Foo {}
前者相当于:
namespace Library{
internal class File{
//code inside it
}
}
所有可见性默认为尽可能不可见 -private
对于class
es 和struct
s 的成员(方法、属性、字段、嵌套类和嵌套enum
s)以及 sinternal
的直接成员namespace
,因为它们不能是私有的。
internal
意味着同一个程序集中的其他代码可以看到它,但没有别的(除非朋友程序集和使用反射)。
这有两个原因:
public
您,可能会意外地公开一些应该是私有的或内部的。如果你不小心使某些东西不够可见,你会得到一个明显的编译错误并修复它。如果你不小心让某些东西太显眼,你就会在你的代码中引入一个不会被标记为错误的缺陷,这将是一个需要稍后修复的重大更改。通常认为更好的风格是使用访问修饰符明确,在代码中更清晰,就是发生了什么。
默认情况下,所有class
es (以及所有类型)都是internal
,所以为了让它们可以从外部访问(没有类似的东西InternalsVisibleToAttribute
),你必须public
明确地制作它们。