9

我了解 OOD 中的经验法则是尽可能合理地减少对给定对象的所有成员的访问。

C# 和 Java 似乎都实现了相同的访问修饰符集;然而,让我困惑一段时间的事情是为什么 Java 类似乎大多被声明为公共而 C# 类似乎大多被声明为默认。 这些语言是否有一些微妙之处强加了这些差异,或者仅仅是惯例问题还是什么?

我发现自己经常检查我的 C# 代码(我习惯性地将大多数类公开,除了内部类、匿名类和其他范围狭窄且有用的类)以试图取悦编译器,但是我想知道我是否可能遗漏了什么重要的。

4

4 回答 4

6

我想你回答了你的问题。按照 Joshua Bloch 的说法,“经验法则很简单,让每个类或成员尽可能地不可访问。” 有效的 Java

于 2009-08-18T19:34:03.987 回答
5

Java 的作用域与C#的作用域略有不同。

这在C# From a Java Developer's Perspective 's Same, But different: Access Modifiers中简要讨论过。这份文件现在有点过时了,但仍然主要是相关的。

该列表有两个错误:

  1. C#internal等效于 Java 的默认范围(即它自己的范围)。
  2. C#internal protected相当于 Java 的protected.

此外,上述文档没有提到类的默认访问修饰符是什么,仅适用于方法和属性/变量。

作为参考,c# 中类的默认范围是内部的。如前所述,Java 是其通常的默认范围。

于 2009-08-19T13:37:54.730 回答
1

我唯一公开的是静态/最终变量,它们通常是常量。其他一切都是私有的,并且在适当的时候通过 getXXX() 和 setXXX() 方法进行访问。setXXX() 方法还对数据执行任何验证。如果我必须保护某些东西,我会这样做,但我通常会避免它。

于 2009-08-18T19:32:04.753 回答
0

更少的“客户”(其他代码)了解您的类的内部工作,他将受益更多……简单的抽象规则,以及 OOP 的基本支柱。上面已经给出了正确答案:

“经验法则很简单,让每个类或成员尽可能地不可访问。” 〜约书亚布洛赫

于 2009-08-18T20:15:09.177 回答