私は自分のアプリケーションの中にいくつかのコントロールを持っています。これらのコントロールはすべて明らかにControlクラスを拡張しています。インターフェイスに特定のクラスタイプを適用しますか?
私はいくつかの共有インターフェイスを持つためにこれらのいくつかが必要なので、私は共有機能をカバーするインターフェイスを作成しました。
私のインターフェイスをControlのサブクラスに与えることしかできない方法はありますか?
すなわち、(擬似)
interface IEmbed
class MyControl1 : Control, IEmbed
class MyControl2 : Control, IEmbed
class MyClass : IEmbed
MyClassのは、それが制御されていなくてもIEmbedを実装しようとするため、理想的には、私は、ここで失敗するようにコンパイラをしたいと思います。
私はこれを間違った方法で行ったのですか、またはこの動作を強制する方法はありますか?
編集
私は、この動作を強制したい、なぜ私が尋ねてきました。
IEmbedの実装を子コントロールとして別の要素に追加する方法があります。
これはすべて正常ですが、Controls.Add()はIEmbedオブジェクトの取得を拒否しますが、これはコンパイルされません。
IEmbedを実装しているものがコントロールでなければならないとコンパイラに伝えたら、それはうまくいくでしょうか?
なぜインタフェースはControlのサブクラスに与えられるべきですか?おそらくあなたはそれをControlにキャストする必要がありますか?そうであれば、単に 'Control GetControl()'と呼ばれるインターフェースにメソッドを追加するだけで、インターフェースがControlのサブクラスではなくても、関連するControlを提供しなければならず、キャストを避けることができます... – digEmAll
編集をご覧ください。 – KingCronus
@digEmAll OPがすべての実装をコントロールにしようとするならば、彼はコントロールをサブクラス化する必要があります(Strilloの答えを参照)。私は特定のGUIフレームワークに何かを結びつけないためにインターフェイスがより良くなると思っていますが、その中の '' Control GetControl() ''メソッドはそれをすべて破ります。 –