例を挙げましょう。
私はいくつかの一般的なクラス/インターフェース定義を持っています:
_interface IGenericCar< T > {...}
_
上記のクラスに関連付けたい別のクラス/インターフェースがあります。例えば:
interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}
基本的に、汎用のIGarrageは_IGenericCar<int>
_または_IGenericCar<System.Color>
_であるかどうかに関係なく、IGenericCar
に依存します。これは、そのタイプに依存していないためです。
通常、これを実現するには2つの方法があります。
Option1:IGarrage
を表すT
に、IGenericCar<T>
制約に渡す必要がある別のパラメーターを追加します。
interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... }
Option2:ジェネリックではないIGenericCar<T>
のベースインターフェイスを定義し、そのインターフェイスに対して制約します
interface IGenericCar { ... }
interface IGenericCar<T> : IGenericCar { ... }
interface IGarrage<TCar> where TCar : IGenericCar { ... }
次のようなことをするのは理にかなっていますか?
interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType >
where TCar: IGenericCar< TCarType > {...}