今回はC#のアクセス修飾子を学んでいきます。
よく使われるアクセス修飾子はpublicやprivateと言われるものですが、他にもあるのでそれぞれの特徴について解説していきます。
アクセス修飾子は6種類ある
アクセス修飾子は6種類あります。
それぞれの機能はこちら。
public | どこからでもアクセス可能 |
private | 同じクラス内のみアクセス可能 |
protected | 同じクラスと派生クラス内でアクセス可能 |
internal | 同じクラスとアセンブリ内でアクセス可能 |
protected internal | 同じアセンブリと別アセンブリの派生クラスでアクセス可能 |
private protected | 同じクラスと同じアセンブリの派生したクラスのみアクセス可能 |
public
public
はどこからでも参照できます。
他のクラスからもできますし、参照設定しているプロジェクトからも可能。
ただし、どこからでも参照できるがゆえ、プログラムの保守でコードを変更するときに影響範囲が大きくなるおそれがあります。
同じソリューションを使っていればコンパイル時のエラー検出引っかかりますが、DLLとして提供している場合は結合テストなどのプログラム実行時でないとエラーとならず、バグが見落とされるリスクがあります。
もう少しスコープを狭くできるようであれば後述のinternal
を検討しましょう。
internal
internal
は同一アセンブリ内であれば参照可能。
アセンブリとはexeファイルやdllファイルのことを指します。
VisualStudioにある他のプロジェクトから参照されていてもinternal
であれば参照されることはありません。
public
のようにDLLで提供していることまで考慮してプログラムを修正する必要はなく、あくまで自分のプロジェクト内での影響範囲を確認すればOKです。
protected
protected
は同じクラスと派生クラス内で参照できます。
派生クラスとは親子のようなクラスで、基本となるクラスがあってそれを継承したクラスのことをいいます。
親クラスのみで使う場合はprivate
と使い、子にも使わせるときにprotected
を使うのが通常の使い方です。
また、protected
はプロジェクトが別であっても継承関係にあれば参照することができるので注意が必要です。
private
private
は同一クラス内からのみ参照可能。
他のクラスからの影響を受けたくない場合はprivate
を使いましょう。
コメント