画面に物を表示するライブラリを作成しているので、IDisplayable
インターフェイスを作成するとします。このインターフェイスは、オブジェクトからコントロールを作成する1つのメソッドを持っています:displayable.GetControl()
。いくつかの型パラメータに対してのみ機能するメソッドを持つ汎用クラス
表示できる独自のリストタイプを作成する場合は、MyList<T>
です。このリストは、T
がIDisplayable
の場合にのみ表示されるので、TがIDisplayableを実装する必要があることをMyListクラスで尋ねることができます。しかし、TがIDisplayableでないとき(そして結果としてこのリストが表示されないとき)、このリストタイプをいくつかの場所で使いたいと思う。したがって、TがIDisplayableを実装する場合、MyListはIDisplayableを実装していると言えるでしょうか? MyList<T>
はIDisplayableを常に実装していますが、TがIDisplayableでない場合はGetControl()
を呼び出そうとすると実行時に例外がスローされますが、静的な型の安全な方法があるかどうかを知りたいと思います。これはできますか?あるいは間違った解決策を見ていますか?
編集:
私がこれまでMYLISTがあまりにも多くの責任を持っていることの提案に同意します。私の元の考えはMyDisplayableList<T> : MyList<T> (where T : IDisplayable)
を作成することでした。
このアプローチの問題は、MyListを取得してMyListを返すメソッドが多数あることです(たとえば、LinqのSelectのようなメソッド)。 MyDisplayableListでselectを使用すると、MyListが返され、MyListであっても表示できません。C#でこの問題を処理する型セーフな方法はありますか?
あなたはまた、非表示のためマイリストを使用したくない理由クラス? MyList にはあまりにも多くのことをやってほしいと思っているようですが、その理由がなくては分かりません。 –