DLLを身近に感じることができるクラスライブラリ

阪神高速8号京都線が開通したとか。
一体どうなるかはしらないけどね。けど、阪神高速なのはどうも不気味。
あと、今日はセンター試験の1日目ですか。
高校の理科・数学の科目の対応がわからないからなんともいえないけど、
こちらはかなり解けるのでは。明日あるんだけどね。
さて、DLL、Dinamic Link Library。
実はこういうものがあるんですね。
昔はLHAを圧縮解凍するにはlha32.dllが、ZIPを圧縮するにはzip32.dll、解凍にはunzip32.dllが必要だったなと。
今でもそれを用いてやるプログラムはあるけどLhazのように特に不要にしてあるのもありますね。
意外とめんどくさいので。
というか圧縮解凍にたくさんのソフトを使うならともかく、普通は1つで事が足りるわけで。
多分、いろんなアプリケーションでLHAでアーカイブされたファイルを展開しながら使うと考えたのか、知らないけど。
実際そういうソフトもありますけどね。この手のDLLがあれば自動で展開して使えるようにしてあるとか。
画像閲覧ソフトに多そう。けど、これも最近はDLL不要だし。
それはよいのだけど、自作することは簡単にできます。
C#でクラスライブラリを作ればいいわけだ。
というわけでひたすら作ったクラスたちをDLLにして、
同じソリューションの下にCUIのプログラムを用意して、そのDLLを用いるプログラムを書く。
そのとき、参照設定にクラスライブラリのプロジェクトを追加しておけばOK。
これでつなげてデバックとかができる。
さて、当然だけど動きはなんにも変わらない。
ちなみにクラスライブラリ下のクラスは1つの名前空間に入れてある。
名前空間は名前の重複を避けるためのものなので、DLLでは必須だろうと思う。
で、別にDLLだからって何にもおきないのだけど、
もしここで、GUIで操作できるプログラムも作るのならばDLLにしてある意味はある。
DLLとCUI版とGUI版を用意するだけでいいから。
同じディレクトリにDLLを置くか、system32にDLLを置くかすればいいけど、同じディレクトリでいいだろう。
全部同じディレクトリに置けばDLLは1つで済む。
それとか、他の人がこのDLLを応用するとき。
そのために便利なのが、XML Documentation。
まず、ソースにいろいろ資料を書いておく。
シンプルに、概要・引数・返り値だけ書いてみた。Exceptionも書いておくべきか。
書き方だけど///でコメントアウトして書く。/は3つね。

/// <summary>
/// 何かの集合のクラスです。
/// </summary>
class foos{
/// <summary>
/// CSVを読み込んで一覧に登録します。読み込んだ個数を返します。
/// </summary>
/// <param name="st">元となるCSVファイルのストリーム</param>
/// <returns>CSVから読み込んだ個数</returns>
public int people(System.IO.Stream st)

という具合。これを書くと、Visual Studioが説明書きを出してくれるし、オブジェクトブラウザでもいろいろわかるようになる。
だから特に説明書いらず…
なんだけど、1つだけ小細工しないといけない。
プロパティーでXMLを出力するようにする。
これでDLLファイルとそのXMLを持っていけば、説明書いらずでそのクラスを使える。
プログラム例まで示せるそうだ。
Javaに同じようなものがあるそうだが、それをさらに高度にしたものかな。
ちなみにVBでは///の代わりに”’を使って同じようにできる。
‘はBasicのコメントアウト(:REMの省略形)なわけで、理屈は一緒だな。
ところでアクセス修飾子ですけど、publicとprivateを使うことが多いかと。
で、internalというのもあるのですが、これはアセンブリ内ではpublic、アセンブリ外ではprivateというやつ。
DLLにするのならば、DLLの内部同士では自由にアクセスできるけどDLL外ではアクセスできないということ。
意外と重宝しましたね。
オブジェクトの間でいろいろやりとりしなきゃいけないけど、本音言うと隠匿したいことだからな。
こうやって隠して隠して、触れるところを少なくすると、変なことができなくなると。
こういうのはオブジェクト様様だな。
しかし、今回作ったDLLはいまいち使い道のないDLLだな。
そりゃそうなんだけど。