私は何度も何度も何度もやって来る状況に苦しんでいますが、私がやっているやり方が間違っているのか、別のやり方でやり遂げることができるのかどうかはわかりません。Windowsフォームを抽象クラスとして使用する - どのパターンを使用するのですか?
アン例:
が、私はデータグリッドの検証を実行するためにいくつかのプライベートメソッドを持つのDataGridViewを持つWindowsフォームを持っているとのDataGridViewなどの上にマウスの右クリックを解釈するこのWindowsフォームは、本質的に「抽象」クラスです。直接インスタンス化されることはありません。
次に、この基本クラスから継承し、さまざまな方法(テンプレートパターン)でカスタマイズします。データグリッドビューの列とそれらの列に固有の特定の書式設定メソッドを定義します。
これらのクラスを使用すると、基本クラスのパブリックメソッドが自分のインターフェイスを形成し、必要なデータグリッドビューの特定の型をインスタンス化できます共通のインターフェースを介して。美しい。
問題:
主な問題は、あなたが実際にはこれらの抽象クラスをインスタンス化することはできませんとしてグラグラをスローするようにVisual Studioのデザイナーを発生させることなく、抽象としてWindowsフォームクラスを宣言することができないということです。
いくつかのソリューション:そう、少なくとも私は、のいずれかを上書きするのを忘れた場合
throw new NotSupportedException();
:
私は私が上書きされたい基底クラスでこれらのメソッドを「実装」しています瞬間私のインターフェースを形成するこれらのメソッド。これは私にとってはむしろ臭いようですが、私は本当にそれが好きではありません。
私がおもしろい別の解決策は、継承を完全に取り除き、インターフェース(例えばIMyDataGrid)を定義し、それを各datagridviewクラス(戦略パターンの一種)で実装することでした。しかし、ここでの問題は、コードの再利用の利点を失うということです。継承とは、さまざまなフォームを作成し、それらにデータグリッドビューをドロップし、同じコードを効果的にコピーして貼り付けるという意味です。悪い。
これを達成するためのよりよい方法がありますか?
GridViewから直接継承し、Windowsフォームで使用するコントロールを作成するのはなぜですか? – Macros