私はしばしば、各オブジェクトがいくつかのインターフェースを実装しなければならないオブジェクトのリストを作成したいと思っていました。たとえば、次のようなことをしたいと思います。
List<T> where T : IConvertible, IComparable _myList;
私が検討したもう1つのオプションは、これら2つのインターフェイスを実装する3番目のインターフェイスを作成して、これら2つのインターフェイスを実装するオブジェクトが本質的に私のものを実装するようにすることでした。
public interface IConvertibleAndComparable
: IConvertible, IComparable { }
List<IConvertibleAndComparable> _myList;
IConvertible
これにより、とIComparable
、の両方を実装するオブジェクトdouble
とint
、自分のオブジェクトを追加できるようになります。継承のインターフェース以外に新しい機能が追加されないため、明示的に実装するIConvertibleAndComparable
必要はありません。
最初のスニペットは違法であり、2番目のスニペットは合法ですが、私が望むことを実行しないことを理解しています。私がやろうとしていることを達成することは可能ですか?そうでない場合、これらのいずれかが将来のC#機能の候補になりますか?
(注:これは、空のインターフェースの正当なアプリケーションになります。)
編集
より一般的な意味で、私は次のいずれかを実行したいと思います。
private MyGenericClass<T> where T : IA, IB, ... _myClass;
T
必要なすべての制限を宣言できる場所、または
public interface IMyCombinedInterface : IA, IB, ... {}
private MyGenericClass<IMyCombinedInterface> _myClass;
ここで、を実装し、本質的に(または暗黙的に)実装するタイプ(IA
新しい機能を明示的に宣言しない場合のみ)。IB
...
IMyCombinedInterface
IMyCombinedInterface