System.Windows.FormsのPanelとLabelを継承したカスタムコントロール(PanelEx、LabelEx)を作成していますが、それぞれに共通した処理があるため、切り出して別クラス(classLib)に実装したいと考えています。
この共通した処理の中にはPanelとLabelの継承元であるControlのprotectedメソッドを呼び出す処理もあるためclassLibの継承元を指定して宣言したいのです。
つまり以下のようなことがしたいです。
class classLib<T> : T
class PanelEx : classLib<Panel>
class LabelEx : classLib<Label>
しかし、ジェネリックの型パラメータは派生させることができず困っています。
こういうことはそもそもできないのでしょうか?それとも別の方法で実現できる手段が提供されているのでしょうか?
これでどうでしょうか
型パラメータの制約が必要ならば追加してください
public class TestGen<T> : Control { public void TestControl() { base.CreateHandle(); } } public class PanelEx : TestGen<Panel> { } public class LabelEx : TestGen<Label> { }
回答有難う御座います。
提示いただいたコードの場合、Tに与えたPanelやLabelの機能はどうなりますか?
両方共Controlの派生クラスになってしまうのではないでしょうか?