web-dev-qa-db-ja.com

「任意のジェネリック型」定義を持つC#ジェネリック「where constraint」

例を挙げましょう。

  1. 私はいくつかの一般的なクラス/インターフェース定義を持っています:

    _interface IGenericCar< T > {...}_

  2. 上記のクラスに関連付けたい別のクラス/インターフェースがあります。例えば:

    interface IGarrage< TCar > : where TCar: IGenericCar< (**any type here**) > {...}

基本的に、汎用のIGarrageは_IGenericCar<int>_または_IGenericCar<System.Color>_であるかどうかに関係なく、IGenericCarに依存します。これは、そのタイプに依存していないためです。

102
Nenad

通常、これを実現するには2つの方法があります。

Option1IGarrageを表す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 { ... }
135
JaredPar

次のようなことをするのは理にかなっていますか?

interface IGenericCar< T > {...}
interface IGarrage< TCar, TCarType > 
    where TCar: IGenericCar< TCarType > {...}
6
snarf