【发布时间】:2014-08-03 08:35:28
【问题描述】:
最近,我一直在从事 Java 和 C# 方面的工作。在 Java 中,不指定类或类成员的可访问性使其包私有(不存在显式修饰符)。在 C# 中,这与 the accessibility always defaults to 不同,它也可以使用相应的修饰符显式指定(例如,internal 用于顶级类)。
C# 是一种设计良好的语言,那么为什么它甚至包含根据类型和类型的嵌套默认为不同级别的功能,而不是仅仅强制用户显式?有什么我不知道的好处吗?
【问题讨论】:
-
我想说这在 C# 中比在 Java 中要好得多。 Java 中的默认设置是可怕的选择,不能明确说明它只会让情况变得更糟。目前尚不清楚您是说您认为 Java 更好或更差 - 您的第二段表明您认为它应该始终是明确的,但您的第一段似乎表明您喜欢 Java 的工作方式......
-
@JonSkeet 我同意 C# 通过添加“包私有”又名“内部”关键字来改进这一点。我的观点是:既然每个可用级别都有一个明确的修饰符,为什么还要有一个默认值?
-
internalisn't 与“包私有”完全不同——程序集和命名空间是不同的。至于具有显式修饰符 - 有些人喜欢显式而另一些人则不喜欢。它还使代码更容易移动 - 例如,您可以将内部嵌套类更改为内部顶级类而无需更改任何内容。 -
所以你没有必须明确地这样做。请注意,程序集和包是不一样的:它们在某些方面重叠,但它不是一对一1 次转化。
标签: c#