假设您有如下所示的场景:
public class MyVehicle<TType, TLoc> : IDrive<TType, TLoc> where TLoc: IVehicle, IMove<TType>
TLoc
参数都继承自IVehicle
吗?此外,TLoc
一个或两个都继承自IMove<TType>
吗?
如果两个TLoc
参数都不继承自IVehicle
如何正确声明?
问题:您如何区分MyVehicle
继承自什么和TLoc
是什么?
(上下文是当场编造的,试图降低我实际使用的复杂性。泛型参数的语法和功能是我关注的重点)
TLoc
参数都继承自IVehicle
吗?
只有一个TLoc
参数,它只在两个地方使用。因此,MyVehicle
的第二类型参数和 IDrive
的第二类型参数都将派生自 IVehicle
,因为它们都将引用相同的类型。从IMove<TType>
继承也是如此。
您如何区分
MyVehicle
继承自什么和TLoc
是什么?
MyVehicle
类实现使用两个类型参数实例化的泛型接口。 TLoc
恰好是这些类型参数之一。
两个参数都继承自 IVehicle 吗?
从技术上讲,TLoc
必须是实现IVehicle
的类型或从它"继承"的另一个接口。 但是以我的方式 tihnt 你 mena "继承"然后是的;事实上,它们必须是相同的类型。
此外,一个或两个 TLoc 是否从 IMove 继承?
两者都,在你对"继承"这个词的意义上。
如果两个 TLoc 参数都不继承自 IVehicle,我该如何正确声明它?
好吧,只有一个TLoc
所以我不确定你的意思。 不能在类及其实现的接口中使用不同的泛型参数。
您可以向类添加一个额外的泛型参数:
public class MyVehicle<TType, TLoc1, TLoc2>
: IDrive<TType, TLoc1>
where TLoc1: IVehicle, IMove<TType>
where TLoc2: IVehicle, IMove<TType>
然后,您可以使用不同的类型进行TLoc1
和TLoc2
。