4

ごく最近まで、通常のクラスと内部クラス/サブクラスの間に違いがあることを気にしていませんでした。

内部クラスのインスタンスとそれを含むクラスのインスタンスの間の関係は何ですか?また、内部クラスの目的は何ですか?それらの違いは何ですか?

4

4 に答える 4

15

Java とは異なり、C# - 含まれるクラスは入れ子になっています。包含クラスのインスタンスと包含クラスのインスタンスの間には関係がありません。含まれているクラスは、含まれているクラスのアクセシビリティを制御し、名前空間の汚染を回避するために C# で使用されます。

(一部の企業では、各クラスを独自のファイルに入れる必要があるというコーディング標準があります。含まれるクラスは、小さなクラスの場合の回避策です。)

Java では、内部クラスのインスタンス (オブジェクト) は外部クラスへのポインターを持ちます。イベントなどを処理するために多くの小さなクラスを使用するため、これは Java で行われました。C# にはそのためのデリゲートがあります。

(包含クラスは、誰もが好む Java の実験的な理想の 1 つでしたが、時の試練を真に証明するものではありませんでした。C# がかなり後に登場したため、うまく機能しなかったことを Java から学ぶことができました)

于 2009-07-28T12:44:58.493 に答える
6

.NET には Java のような内部クラスはありません。ネストされたクラスがあります。

それらを使用する理由は、クラスのアクセシビリティを制御するためです。

于 2009-07-28T12:40:11.847 に答える
4

C# では、通常のクラスと内部クラスの間に少なくとも 3 つの違いがあり、内部クラスとそれを含む外部クラスの間に関係を形成することもできます。

  • 内部クラスは、保護、内部、保護内部、またはプライベートとして宣言できますが、通常のクラスは宣言できません。
  • 内部クラスは、そのクラスの名前を使用せずに、それを含む外部クラスの静的メンバーにアクセスできます。
  • 内部クラスが外部クラスのインスタンスにアクセスする場合、静的でない場合でも、そのオブジェクトのプライベート メンバーにアクセスできます。
于 2009-11-12T23:39:42.017 に答える
1

C# - 含まれているクラスがネストされています。包含クラスのインスタンスと包含クラスのインスタンスの間には関係がありません。

于 2009-07-28T12:39:52.800 に答える