デリゲートとイベントハンドラの勉強を少々しました

来春の引越しに向けて古い書籍の整理をしていたとき,C#の本が出てきたので少し読んでました。本は専門学校時代に教科書として購入した市販の本です。専門学校時代は難解な本だなと思って,ほとんど読まなかった(授業でも使わなかった)けど,いま読んでみるとなかなか分かりやすいというか,C#のメカニズムにまで掘り下げて説明されていて面白い。


ちょうど1年くらい前までバイトでC#使ってビジネス向けWindowsアプリの開発やってました。知らないことはたくさんあっても,そこはC#Visual StudioC#を使えば,無知な僕でもそこそこの開発はやってこれたものだ。本を読んで,昔からキーワードだけ知っていたけど今いち理解していなかった「デリゲート」と「イベントハンドラ」について勉強しました。


少し勉強しただけなので,正確な解説は書けないけど,メモ書きとして学んだことを記しておきます。

・デリゲートって要するに何?
 -デリゲートの仕組みを使うとメソッド呼び出しの際に,適当なメソッドを引数として渡せる
・JSやPerlなどで引数に関数を渡すのや,Cの関数ポインタとは違うのか?
 -型や引数など,引数として渡せるメソッドの定義を書かないといけないので,コンパイル時にエラーチェックができる。とことかが違うかな?


イベントハンドラって何?
 -仕組み的にはデリゲート。
・どうやって使うの?
 -デリゲートなので,渡せるメソッドの仕様(引数の種類や個数)が決まってる。
 -'+='でメソッドを登録することができる。
 -マルチキャストの機能を持っていて,イベントが起こったときに登録してあるメソッドが全て実行される。


デリゲートは良くオブジェクト指向の概念の中では,委譲と例えられるけど,これが今ひとつ「何やねん?」って感じで理解しづらいように思います。しかし,仕組みや利用例を知ってそのメカニズムに感動しました。イベントハンドラーも同様に素晴らしい。イベントハンドラーは,C#Windowsアプリ作っていると多用されてるんだけど,Visual Studioが自動生成してくれる部分なので,そのメカニズムを知らない人は多いんじゃないでしょうか。


MicroSoft.NET Frameworkは低レイヤーが見事に抽象化されていて,手軽に早くプログラミングできて,たとえ粗悪なコードを書いてもそこそこちゃんと動きます。けど,それでそこそこ作れちゃうもんだから,思考停止に陥りやすい気がしなくもないです。僕の場合,バイトではかなり粗悪なコードを書いていたように思います。デリゲートやイベントハンドラを使ったらもっと効率的なコードが書けたところもあったかも。


.NET Frameworkが悪いと言いたいんじゃないのですがね。生産性の高さや,高度な抽象化,GUI操作によるプログラミング,クラスの設計・ネーミングなどなど,良くできてると思います。知らなかったから,効率的なコードが書けませんでしたってのは,ただ不勉強なだけだし,ね。


そういえば,.NET Frameworkを褒めているあたり,この前読んだ記事(http://www.itmedia.co.jp/enterprise/articles/0712/26/news011.html)に影響されているみたいですが,これは僕が兼ねてより思ってきたことです(笑)と言うか,この記事のきょろちゃんて方,知人なんですけどヤバ過ぎ・エグ過ぎですよね。同年代にこういう人がいることは良い刺激になります。