とかいうものを考えた。
既にあるのか、それとも需要がないから作られないだけなのかは知らない。
例えばグリッド。
仕事では未だに.NET 1.1なのでDataGridを拡張して使ってるわけだが、たまに壁にぶち当たる。
WPFではどうだか知らんが、WinFormsではコントロールはウィンドウである。
すなわち、内部にウィンドウプロシージャを持ち、どのウィンドウメッセージにどう応答するかががっちりコーディングされている。
セルをマウスでクリックしたらどうなるかだとか、WM_PAINTに応じて表示をどうするかだとか。
それを継承するわけだが、継承というとどうしても、継承元のDataGridを踏襲したり、オーバーライドした親のメソッドを呼んだりしないといけない場合がある。
んで、そういった手を触れられないところに不都合なコードが書いてあったりすると、カスタマイズしきれずに仕様の漏れが出ることがある。
そうではなく、なんというかこう、間に一枚、層を噛ませておいてはくれないものかと思うわけだ。
グリッドコントロールの見た目を持たない、論理的で抽象的なグリッドがあればいいと思うことが…ないか?
つまり、グリッドコントロールはセルの集合であるとか、何かをするとセルの編集モードに入る(「何か」であって、限定していないことが重要だ)だとか、そういった感じの、グリッドの特性だけを集めた抽象クラスみたいなものが。
それが、「クリックされたらセルの編集モードに入る」とかハードコーディングされていると、「クリックしてもセルの編集モードに入らないようにしたい」という要求が満たせないわけで。
まぁ、親クラスがそう作られている以上、子クラスでクリックを殺すのはIS-Aの原則に反するという気もする。
じゃあどうするか。DataGridを継承してクリックを殺すのがダメなら、Controlから継承してグリッドをイチから実装しなきゃならんわけだが、それはあまりにもコストがでかい。
そこで中間コントロールだ。
ソレに見た目とユーザインターフェイスを持たせるだけで立派なグリッドコントロールが出来上がるような。
いろいろと細かい要望が違う多数のグリッドコントロールの、それでも共通化できるコアの部分だけを実装したもののような。
そんなものが。
というか、思うに、WinFormsのコントロールライブラリは粒度がでかすぎて、継承して使うには向かないと思うのですよ。ねぇ。