今回は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を使いましょう。

コメント