インターフェイス IDataControl があります。
public interface IDataControl
{
...
}
次に、List<IDataControl> の変数を持つクラスがあります。
List<IDataControl> items;
問題は、このコレクションの要素を別のフォームまたは別のコントロールの「コントロール」プロパティに追加しようとしたときです。
panel.Controls.Add(items[i]);
「IDataControl」は「Control」から継承されていないため、IDE は「最適なオーバーロードされたメソッド マッチング……」と言っています。
私はエラーを理解しており、次のようなキャストを実行できることを知っています。
panel.Controls.Add( (Control)items[i] );
しかし、キャストを必要とせず、厳密な型検証も行う「よりクリーンな」方法があるかどうかを知りたいです。
では、「IDataControl」は Control 派生オブジェクトによってのみ実装できることを示すことは可能ですか?
public interface IDataControl where this : Control
{
...
}
または、クラスとインターフェイスの変数を宣言することはできますか?
このようなもの:
Control:IDataControl item;
List<Control:IDataControl> items;
ありがとう