C#にはアクセシビリティというものがあり
private
internal
publicなどがあります。
そのほかには
protected
protected internalがあります。
publicであれば同一アセンブリと
そのアセンブリを参照しているアセンブリから参照できます
(要するにすべて)
privateはそのクラスのみ
internalは同一アセンブリのみ
protectedは同一クラスと派生クラスからのみ参照可能
protected internalはprotectedとinternalの両方の効果があります。
プログラミングに慣れていない方は
一見publicを使えばどこからでも参照できて
全部これでもいいように思います。
しかし全くそういう事はありません。
このアクセシビリティをうまく使わないと
とても分かりにくい,改造しにくい,
ダメダメなプログラムが出来上がります。
そういう私も昔はそんなダメダメな
プログラムを書いていました。
では,なぜだめなのか,一緒に考えていきましょう。
例えばWindowsフォーム画面を作って
そこにボタンを一つ置いたとします。
C#のデザイン画面を見てみましょう。
1 |
private System.Windows.Forms.Button button1; |
こんな感じでボタンが宣言されています。
これがもし
1 |
public System.Windows.Forms.Button button1; |
だったらどうですか?
違いはボタンのアクセシビリティだけです。
publicに変更しました。
この瞬間からこのボタンがあるプロジェクト内とこのプロジェクトを参照する
すべてのコードでこのボタンの値を変更できるようになりました。
これってすごく怖いですよね。
このプログラムをリリースした後にもし
このボタンに対して何か修正を加えるたびに
どこに影響するかを調べる必要がありますが,
どこからでも値を変更できる時点で
ものすごい量のコードをチェックしないと
いけなくなります。
要するにアクセシビリティというのは非常に大切で
publicにすればどこからでも見られて便利な気もしますが
とても見通しの悪いプログラムになってしまいます。
アクセシビリティはできるだけ
外から見えないほうがいいです。
とはいえ,クラスなどはprivateのクラスでは
誰も使えないクラスになってしまい意味がありません。
C#でもクラスを作成したらデフォルトはinternalになっています
(アクセス修飾子を省略するとC#では変数はprivate,
クラスはinternalになります)
なので,魅せる必要のある最小のアクセシビリティにしましょう。
その上で,必要になった時にpublicに昇格させるという
設計がよいかと思います。
簡単ですがアクセシビリティに関しては以上です。
最後までお読みいただきありがとうございました。
オブジェクト指向
・アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
すばらしい本です。オブジェクト指向が詰まっています。
・オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講座
サンプルコードはjavaですが,最初にオブジェクト指向に目覚めるのに最適な本です。
・Head Firstオブジェクト指向分析設計 ―頭とからだで覚えるオブジェクト指向の基本
マンガみたいな感じで読めて,オブジェクト指向について学べます。
・Clean Architecture 達人に学ぶソフトウェアの構造と設計
・実装パターン
廃盤のため異常に高くなりすぎなので,様子を見た方がいい気がします。一万円のボリュームがあるかどうかは微妙です。