C#でのアクセシビリティ

当サイトではアフィリエイト広告を利用しています。

C#

C#にはアクセシビリティというものがあり
private
internal
publicなどがあります。
そのほかには
protected
protected internalがあります。

 

 

publicであれば同一アセンブリと
そのアセンブリを参照しているアセンブリから参照できます
(要するにすべて)

privateはそのクラスのみ
internalは同一アセンブリのみ
protectedは同一クラスと派生クラスからのみ参照可能
protected internalはprotectedとinternalの両方の効果があります。
プログラミングに慣れていない方は
一見publicを使えばどこからでも参照できて
全部これでもいいように思います。

しかし全くそういう事はありません。

このアクセシビリティをうまく使わないと
とても分かりにくい,改造しにくい,
ダメダメなプログラムが出来上がります。

そういう私も昔はそんなダメダメな
プログラムを書いていました。

では,なぜだめなのか,一緒に考えていきましょう。

例えばWindowsフォーム画面を作って
そこにボタンを一つ置いたとします。

C#のデザイン画面を見てみましょう。

private System.Windows.Forms.Button button1;

こんな感じでボタンが宣言されています。
これがもし

public System.Windows.Forms.Button button1;

だったらどうですか?
違いはボタンのアクセシビリティだけです。
publicに変更しました。

この瞬間からこのボタンがあるプロジェクト内とこのプロジェクトを参照する
すべてのコードでこのボタンの値を変更できるようになりました。

これってすごく怖いですよね。

このプログラムをリリースした後にもし
このボタンに対して何か修正を加えるたびに
どこに影響するかを調べる必要がありますが,
どこからでも値を変更できる時点で
ものすごい量のコードをチェックしないと
いけなくなります。

要するにアクセシビリティというのは非常に大切で
publicにすればどこからでも見られて便利な気もしますが
とても見通しの悪いプログラムになってしまいます。

アクセシビリティはできるだけ
外から見えないほうがいいです。
とはいえ,クラスなどはprivateのクラスでは
誰も使えないクラスになってしまい意味がありません。
C#でもクラスを作成したらデフォルトはinternalになっています
(アクセス修飾子を省略するとC#では変数はprivate,
クラスはinternalになります)
なので,魅せる必要のある最小のアクセシビリティにしましょう。
その上で,必要になった時にpublicに昇格させるという
設計がよいかと思います。

簡単ですがアクセシビリティに関しては以上です。
最後までお読みいただきありがとうございました。

トップページへ戻る