C#与Java中的访问修饰符最佳实践

时间:2009-08-18 19:28:08

标签: c# java oop access-modifiers

我理解OOD中的经验法则是尽量减少对给定对象的所有成员的访问权限。

C#和Java似乎都实现了同一组访问修饰符;然而,令我困惑一段时间的东西现在是为什么Java类似乎主要被声明为公共,而C#类似乎主要被声明为默认。 这些语言是否有一些微妙的强加这些差异,还是仅仅是约定或什么?

我发现自己经常通过我的C#代码(我习惯性地将大多数类公开,除了内部类,匿名类,以及其他类别的狭窄范围和有用性)以试图取悦编译器,但是我想知道我是否可以缺少重要的东西。

4 个答案:

答案 0 :(得分:6)

我想你回答了你的问题。按照约书亚布洛赫的说法,“经验法则很简单,使每个阶级或成员尽可能无法进入。” Effective Java

答案 1 :(得分:6)

Java's scopingC#'s scoping略有不同。

C# From a Java Developer's Perspective的“相同但不同:Access Modifiers中简要地谈到了这一点。这份文件现在略有陈述,但仍然是最相关的。

该列表有两个错误:

  1. C#的internal相当于Java的默认范围(这是它自己的范围)。
  2. C#的internal protected相当于Java的protected
  3. 此外,上述文档未提及类的默认访问修饰符,仅适用于方法和属性/变量。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

“经验法则很简单,使每个班级或成员尽可能无法进入。” 〜约书亚布洛赫