0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】なぜトップレベルクラスには public と internal しか使えないのか?

Posted at

トップレベルクラスとは?

まず「トップレベルクラス」とは、名前空間の直下に置かれるクラスのことです。

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) だけ
  • privateprotected は「外側のクラス」や「継承関係」が前提なので適用できない

トップレベルクラスは「アセンブリの窓口」なので、外部に見せるかどうかだけを決める存在。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?