17

C#では、静的クラスは、継承をサポートしないことに加えて、インスタンスメンバーを除く「通常の」クラスが持つことができるあらゆる種類の型メンバーを持つことができるクラスです。

静的クラスがJavaでどのように機能するかはわかりませんが、私が見た限られた量のJavaコードに基づくと、静的クラスがまったく同じように機能しないことは明らかです。

誰かが違いを列挙してくれませんか?

4

3 に答える 3

13

Javaの静的クラスは、言語によって提供される3種類のネストされたクラスの1つです(他の2つは、非静的なネストされたクラスと関数スコープのクラスです)。

Javaの静的クラスは、C#のネストされたクラスと同じように動作します。つまり、囲んでいるクラスの静的メンバーにアクセスできますが、囲んでいるオブジェクトへの追加の参照がないとインスタンスメンバーにアクセスできません。対照的に、非静的なネストされた関数はインスタンス変数にアクセスできますが、インスタンス化するには、囲むインスタンスが必要です。

于 2013-01-30T03:28:33.077 に答える
6

C#で

静的クラスを使用して、特定のオブジェクトに関連付けられていないメソッドを含めます。たとえば、インスタンスデータに作用せず、コード内の特定のオブジェクトに関連付けられていない一連のメソッドを作成することは一般的な要件です。静的クラスを使用して、これらのメソッドを保持できます。

静的クラスの主な機能は次のとおりです。

  • それらには静的メンバーのみが含まれます。
  • インスタンス化することはできません。
  • それらは封印されています。
  • インスタンスコンストラクタを含めることはできません

Javaの場合:

  • ネストされたクラスのみを静的にすることができます。

  • クラスに静的メンバーを持つことができます

于 2013-01-30T03:28:23.993 に答える
3

Javaでは、最も外側のクラスを静的にすることはできません。静的修飾子を使用して宣言できるのは、内部クラスのみです。そうすることで、その内部クラスが外部クラスのインスタンスメンバーにアクセスできなくなります。

C#では、静的修飾子を使用して外部クラスを定義できます。これにより、そのクラスのインスタンス変数を作成できなくなります。これらは2つの異なる目的を果たします。Javaで同様の効果を作成するために、プライベートの引数なしコンストラクターを定義できます。シングルトンパターンの実装はそうします。また、Javaでは、すべてのメンバーが静的に定義されたクラスを作成することもできますが、それによって新しいインスタンスの作成が妨げられることはありません。

于 2013-01-30T03:35:58.070 に答える