拡張メソッド

拡張メソッドという言葉を聞いたことはありますか?

これは、Visual Studi2008からの新機能で、既存のクラスを「一切」修正することなしにメソッドを追加してしまうという魔法のような機能です。

MSDNのページには、拡張メソッドについてこのように書いています。

拡張メソッドを使用すると、新規の派生型の作成、再コンパイル、または元の型の変更を行うことなく既存の型にメソッドを “追加” できます。 拡張メソッドは特別な種類の静的メソッドですが、拡張された型のインスタンス メソッドのように呼び出します。

今日、OleDbCommandクラスを拡張したくなり、Classを継承しようとしたのですが、Not Inheritable すなわち、継承不可だったため、なんとなく頭の片隅にあった拡張メソッドというものを思い出したという次第です。

そして、この拡張メソッドを実際に使ってみると、思っていたより簡単で、想像していたより何倍も便利で感動したというわけです。

実装の仕方は、こちらのページが分かりやすいです。

拡張メソッドでユーティリティクラスを卒業したい

上のページでも書かかれているのように、関数ベースのプログラミング手法は今となってはかなり古臭く感じてしまいますし、オブジェクトベースに慣れると非常に使いにくく感じます。

そして、もう一つ感じたのは、関数ベースとオブジェクトベースでは可読性も大きく違うということです。

関数ベースですと、

s = f3(f2(f1(s)))

のように、関数がネストして読みにくくなるような場面でも、

s = s.f1().f2().f3()

とメソッドをつなげる(=メソッドチェーンと呼ぶ)ことで、左から右へ自然な流れで読むことができます。

そして、拡張メソッドと最も相性がいいのは、何といってもStringクラスです。

文字列を引数に取り、加工して返却する関数なんてものを恐らく何百と作ってきましたが、それらをメソッドにすることで利便性は幾倍も高まることでしょう。

拡張メソッドを知らなかった、あるいは難しそうだからと敬遠していた方は、是非ともチャレンジしてみてください。

プログラミングの世界が大きく広がることを約束します。

 

関連

拡張メソッドを使ってトランザクションの見通しをよくしてみた