.NETのちょっとマイナーな機能 その2(前半)

拡張プロバイダー
拡張プロバイダというものがどのような機能であるのかを説明するよりも、実際に見ていただいたほうが早いと思います。標準のWindowsフォームコンポーネントの中で、この拡張プロバイダを採用している、ToolTipコンポーネントを使って、実際の動作を見ていきましょう。
Visual Studio(2003でも2005のどちらでも構いません)を立ち上げ、Windowsアプリケーションの新規作成を選択したら、フォームにTextBoxコントロールとToolTipコントロールを1つずつ貼り付けてください。
貼り付けたTextBoxコントロールを選択し、プロパティ ウィンドウを見ると、一番上のほうにToolTip1 の ToolTipというプロパティが表示されているのを確認できると思います。

一旦ToolTipコントロールを削除し、再度TextBoxコントロールのプロパティウィンドウを確認してみてください。先ほどまであったToolTip1 の ToolTipというプロパティがなくなっていますね。
つまり、ToolTipコントロールをフォームに貼り付けたことで、ToolTipコントロールがTextBoxに対してToolTipというプロパティを提供していたということになります。プロパティを他のコンポーネントへ提供するコンポーネントを拡張プロバイダコンポーネントといいます。
では、先ほどのToolTip1 の ToolTipというプロパティに何か文字列を設定して実行してみましょう。
TextBoxにマウスカーソルを持っていくと、設定した文字列がツールチップとして表示されましたね。

さて、ここまでで拡張プロバイダというものがどのようなものなのか、なんとなくご理解いただけたかと思いますが、「これの何がすごいの?」「最初からTextBoxのプロパティにToolTipがあればいいんじゃないの?」とお思いの方もいらっしゃるかもしれません。
では、フォームにTextBoxコントロール以外のコントロールを追加してみてください。TextBoxコントロールのときと同じように、ToolTip1 の ToolTipというプロパティが提供されているのを確認できると思います。もし、TextBoxにToolTipというプロパティを作成するという手段を取るならば、同じようにComboBoxやListBoxなどすべてのWindowsフォームコントロールにToolTipというプロパティを作成しなくてはいけなくなります。拡張プロバイダコンポーネントを使えば、継承では実現不可能な複数のクラスに跨って必要となる機能を提供することが可能になります。このアプローチはAOPのそれと非常に良く似ています。

ちなみに、ToolTipコントロールは.NET 1.0のときからありますが、2.0からはIsBalloonプロパティというプロパティが追加され、バルーンチップとして表示することも可能になっています。

前半では、拡張プロバイダがどのような機能であるのかを説明しました。後半では拡張プロバイダの作り方について説明したいと思います。