假设您有以下情况:
public class MyVehicle<TType, TLoc> : IDrive<TType, TLoc> where TLoc: IVehicle, IMove<TType>
这两个TLoc
参数是否都继承自IVehicle
?另外,TLoc
中的一个或两个IMove<TType>
是否继承自TLoc
?
如果两个IVehicle
参数都没有从MyVehicle
继承,我该如何正确声明?
问题:您如何区分TLoc
继承的内容和{{1}}的内容?
(上下文是在现场制作的,目的是为了降低我实际使用的复杂性。通用参数的语法和功能是我的重点)
答案 0 :(得分:1)
这两个
TLoc
参数是否都继承自IVehicle
?
只有一个TLoc
参数,它只在两个地方使用。因此,MyVehicle
的第二个类型参数和IDrive
的第二个类型参数都将派生自IVehicle
,因为它们都将引用相同的类型。继承自IMove<TType>
。
您如何区分
MyVehicle
继承的内容和TLoc
的内容?
MyVehicle
类实现了一个用两个类型参数实例化的通用接口。 TLoc
恰好是这些类型参数之一。
答案 1 :(得分:1)
两个TLoc参数是否都继承自IVehicle?
从技术上讲,TLoc
必须是实现IVehicle
的类型,或者是&#34;继承&#34;的其他接口。从中。但是在某种程度上,我认为你会继承&#34;继承&#34;好的;实际上它们必须是同一类型。
此外,一个或两个TLoc是否继承自IMove?
两者,在你的意义上,&#34;继承&#34;。
如果两个TLoc参数都不从IVehicle继承,我该如何正确声明?
那么只有一个TLoc
所以我不确定你的意思。您不能在类及其实现的接口中使用不同的泛型参数。
您可以在课程中添加其他通用参数:
public class MyVehicle<TType, TLoc1, TLoc2>
: IDrive<TType, TLoc1>
where TLoc1: IVehicle, IMove<TType>
where TLoc2: IVehicle, IMove<TType>
然后 可以使用TLoc1
和TLoc2
的不同类型。