オブジェクト名.関数名(...); とあったら、該当の関数は普通はオブジェクトが属するクラスの中に見つけられる。
それに対して、オブジェクトが属するクラスの外に、同じ感じで呼べる関数を置ける裏技がある。この機能を提供するのが静的クラスである。
デバッグ時に関数の検索がしにくく混乱するため、多用は慎むべきだが、コントロールなど、既存の部品を少しだけモディファイして自分流の機能を追加したい場合、便利なことがある。
フォームにメニューを付けることを考える。ここで課題とするのは、2列で2行のメニューである。例えば、こんなもの。
メニューが開いている瞬間のスクリーンショットが取れなかったが、ちゃんと開くやつで、その結果メッセージボックスが出た。これを VisualStudio で visual に作ると、普通は次のようなコードができる。
これをシンプルにする救世主は、次のような可搬コードである。'Extention' はクラスとして参照されないので、実はどんな名前でも良く、プロジェクトに同居してさえいれば機能する。
これを使うと先と同じ機能は次のコードで間に合う。
はるかに短いコードになっていて、しかも見やすい。こうなっていないと仕事が始まらないだろうと思うのは私だけ?
同じ機能は、親メニュー(or メニューアイテム)を引数で渡すやり方でもできるが、スマートに書けるのと、機能部分の可搬性が良いので、このスタイルを気に入っている。