1

I've read this very well written blog post by Eric Lippert, but it doesn't explain the specific case of accessibility modifiers.

Conventional stackoverflow wisdom says to always specify "private" explicitly, which would imply that members should have required the modifier.

4

3 回答 3

1

好吧,如果未定义,就没有设置默认修饰符。在 C# 中,即使您没有指定,也会设置默认修饰符,有时您可能想知道您的程序执行方式的默认修饰符(预期结果)。

, enum, structorclass将默认为internal在典型条件下(在命名空间中或仅在文件中单独坐在那里),但private在结构或类中声明时将默认为。

所有方法、字段和属性都具有默认访问修饰符为“私有”。

于 2012-05-17T05:04:38.440 回答
0

可能 C# 的设计者想要并喜欢关于是否包含退款访问修饰符的“宗教”斗争?

(在只有一个访问级别可能的情况下,访问修饰符通常是不允许的:例如,接口或枚举的成员始终是public但不允许编写它。partial方法始终是private但您不能编写它。由于static构造函数不能被显式调用,因此没有有意义的访问级别。显式接口实现对于直接调用并不真正可见,但可以通过接口类型自由访问(如果接口类型从外部可见)。命名空间可以没有访问修饰符。)

与您建议的相反规则当然是一条规则,即不允许指定不改变任何内容的修饰符。这意味着命名空间的直接成员(包括隐含的“全局命名空间”)不能显式声明internal,并且类或结构的成员(包括嵌套类型)不能具有关键字private。有些人使用这个约定。

请注意,属性和索引器的 getter 和 setter 不能指定冗余访问级别。这里唯一允许的是两个访问器中的一个(在这种情况下必须有两个)来指定更严格的访问。

于 2012-12-19T23:16:18.373 回答
0

与此类问题的通常情况一样,确定的答案只能来自创建该语言的人(当然,假设文档中没有解决)。

但可以肯定地假设这是因为,用 David Naugler 的话来说,除了是一种基于 C 的语言之外,“ C# 还受到 Java [和] C++ 的强烈影响,最好将其视为两者的后代( ……)。

作为旁注,Turbo Pascal 的原作者和 Delphi 的首席架构师Anders Hejlsberg也是创建 C#背后的首席架构师。

我意识到这是在回避这个问题,所以你现在可能会问为什么 C++ 最初允许可选的可见性修饰符 =p

于 2018-12-19T21:18:43.363 回答