【问题标题】:Why are there default accessibility levels in C#?为什么 C# 中有默认的可访问性级别?
【发布时间】:2014-08-03 08:35:28
【问题描述】:

最近,我一直在从事 Java 和 C# 方面的工作。在 Java 中,不指定类或类成员的可访问性使其包私有(不存在显式修饰符)。在 C# 中,这与 the accessibility always defaults to 不同,它也可以使用相应的修饰符显式指定(例如,internal 用于顶级类)。

C# 是一种设计良好的语言,那么为什么它甚至包含根据类型和类型的嵌套默认为不同级别的功能,而不是仅仅强制用户显式?有什么我不知道的好处吗?

【问题讨论】:

  • 我想说这在 C# 中比在 Java 中要好得多。 Java 中的默认设置是可怕的选择,不能明确说明它只会让情况变得更糟。目前尚不清楚您是说您认为 Java 更好或更差 - 您的第二段表明您认为它应该始终是明确的,但您的第一段似乎表明您喜欢 Java 的工作方式......
  • @JonSkeet 我同意 C# 通过添加“包私有”又名“内部”关键字来改进这一点。我的观点是:既然每个可用级别都有一个明确的修饰符,为什么还要有一个默认值?
  • internal isn't 与“包私有”完全不同——程序集和命名空间是不同的。至于具有显式修饰符 - 有些人喜欢显式而另一些人则不喜欢。它还使代码更容易移动 - 例如,您可以将内部嵌套类更改为内部顶级类而无需更改任何内容。
  • 所以你没有必须明确地这样做。请注意,程序集和包是不一样的:它们在某些方面重叠,但它不是一对一1 次转化。

标签: c#


【解决方案1】:

我认为您的问题的答案是提供默认访问权限很方便,尤其是在您通常希望所有内容都是公共的结构之类的事物中,并且通常大部分类都是私有的。

但是,我个人希望可以强制它显式,因为它使源代码更加一致,并且不会忘记将成员公开 - 我的主要抱怨是我经常创建一个新属性或方法,忘记将其显式设置为公共,然后当我后来从外部类中使用它时,会感到困惑,因为该成员没有出现在自动完成列表中。意识到发生了什么并修复它需要更多的时间,而不仅仅是修复“未明确指定 x 的访问级别”之类的警告。

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    相关资源
    最近更新 更多