C#泛型“where constraint”与“任何泛型类型”定义?

时间:2009-10-08 23:46:20

标签: c# generics where type-constraints

让我举个例子:

  1. 我有一些通用的类/接口定义:

    interface IGenericCar< T > {...}

  2. 我想要与上面的类相关联的另一个类/接口,例如:

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

  3. 基本上,我希望我的通用IGarrage依赖于IGenericCar,无论它是IGenericCar<int>还是IGenericCar<System.Color>,因为我对该类型没有任何依赖。

2 个答案:

答案 0 :(得分:133)

通常有两种方法可以实现这一目标。

选项1 :向代表IGarrage的{​​{1}}添加另一个参数,该参数应传递到T约束中:

IGenericCar<T>

Option2 :为interface IGarrage<TCar,TOther> where TCar : IGenericCar<TOther> { ... } 定义一个基础接口,该接口不是通用的,并且会限制该接口

IGenericCar<T>

答案 1 :(得分:6)

做以下事情是否有意义:

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