C#のアクセス修飾子とは?5種類のアクセス指定子の違いをわかりやすく解説
クラスのメンバー(変数やメソッド)へのアクセス範囲と可視性を定義するために使われるのが「アクセス修飾子(アクセス指定子)」です。適切なアクセス修飾子を選ぶことで、カプセル化を実現し、安全で保守性の高いコードを書くことができます。
C#では、以下の5種類のアクセス修飾子がサポートされています。
- public(パブリック)
- private(プライベート)
- protected(プロテクト)
- internal(インターナル)
- protected internal(プロテクト・インターナル)
それぞれの特徴を順番に見ていきましょう。
public:どこからでもアクセス可能
public を付けたメンバーは、同じクラス内はもちろん、他のクラスやオブジェクトからも自由にアクセスできます。外部に公開したい機能やデータに使用します。
private:同一クラス内からのみアクセス可能
private を付けたメンバーは、そのクラスの外部からは一切アクセスできず、同じクラス内のメンバーだけが参照できます。クラスの内部状態を隠蔽し、意図しない変更から守るための基本的な修飾子です。
protected:派生クラスからもアクセス可能
protected を付けたメンバーは、その基底クラス(親クラス)自身と、そこから継承した派生クラス(子クラス)からアクセスできます。継承関係にあるクラス間で内部機能を共有したい場合に便利です。
internal:同一アセンブリ内からアクセス可能
internal を付けたメンバーは、同じアセンブリ(プロジェクトやDLL)内のコードからであればアクセスできますが、アセンブリの外部からは参照できません。ライブラリ開発などで、外部公開せず同一プロジェクト内だけで使いたい機能に適しています。
protected internal:同一アセンブリ内+派生クラスからアクセス可能
protected internal は、protected と internal の両方の性質を持つ修飾子です。同一アセンブリ内のすべてのコードに加えて、別アセンブリにあってもそのクラスを継承した派生クラスからアクセスできます。それ以外の外部コードからは隠蔽されます。
まとめ
| アクセス修飾子 | アクセスできる範囲 |
|---|---|
| public | すべてのコードから |
| private | 同一クラス内のみ |
| protected | 同一クラス内と派生クラスから |
| internal | 同一アセンブリ内から |
| protected internal | 同一アセンブリ内、および任意の場所にある派生クラスから |
用途に応じてこれらのアクセス修飾子を使い分けることで、クラス設計の安全性と柔軟性を高めることができます。
-
C++のアクセス修飾子とは?public・private・protectedの違いをわかりやすく解説
データ隠蔽(Data Hiding)は、オブジェクト指向プログラミング(OOP)における重要な機能の一つです。これにより、プログラム内の関数がクラス型の内部表現に直接アクセスすることを防ぎ、クラスの内部構造を保護できます。 クラスメンバーへのアクセス制限は、クラス本体内で指定する「アクセス修飾子」と呼ばれるラベル、すなわち public、private、protected の3つのセクションによって制御されます。 デフォルトのアクセスレベル C++では、クラスのメンバーおよびクラス自体のデフォルトのアクセスレベルは private です。アクセス修飾子を明示しない場合、メンバーは自動的に非公開
-
ASP.NET Web API(C#)の組み込みメッセージハンドラーとは?仕組みと種類を解説
メッセージハンドラー(Message Handler)とは、HTTPリクエストを受け取り、HTTPレスポンスを返す役割を持つクラスのことです。すべてのメッセージハンドラーは、抽象クラス HttpMessageHandler から派生します。このハンドラーを利用することで、リクエストが HttpControllerDispatcher に到達する前に、その内容を処理・編集、あるいは拒否することができます。メッセージハンドラーは、リクエスト処理パイプラインのごく早い段階で実行されるため、Web APIにおける横断的関心事(クロスカッティングコンサーン)を実装するのに最適な場所です。メッセージハンド