トップレベルクラスとは?
まず「トップレベルクラス」とは、名前空間の直下に置かれるクラスのことです。
namespace MyApp
{
public class MyClass
{
}
}
- 名前空間の中で直接宣言される
- 外側にさらにクラスは存在しない
- C# プロジェクトで最も基本的なクラスの形
使える修飾子は 2 種類だけ
トップレベルクラスに付けられる修飾子は以下の2つです。
- public : どのアセンブリからでも利用できる(外部公開)
- internal : 同じアセンブリ内だけで利用できる(外部非公開)
この2択だけ。
なぜ private や protected は使えないのか?
1. private は意味がない
private は「同じクラスの中だけで見える」ための修飾子です。
しかしトップレベルクラスは「名前空間の直下」にいるので、囲っているクラスが存在しません。
→ 隠す相手がいないため、 private は成立しないのです。
2. protected は継承前提だから
protected は「派生クラス(子クラス)から見える」ための修飾子です。
でもトップレベルクラスは「誰かの中にあるわけではない」ので、親子関係を基準に制御できません。
→ トップレベルには使えません。
3. 複合修飾子(protected internal, private protected)
これらも結局は「スコープ」や「継承関係」が前提なので、同じ理由で不可です。
まとめ
- トップレベルクラス = 名前空間直下のクラス
- 見せ方の選択肢は アセンブリ外に見せるか(public)/見せないか(internal) だけ
- private や protected は「外側のクラス」や「継承関係」が前提なので適用できない
トップレベルクラスは「アセンブリの窓口」なので、外部に見せるかどうかだけを決める存在。