通用类型实现通用接口语法?

时间:2014-12-03 22:01:53

标签: c# generics inheritance multiple-inheritance

假设您有以下情况:

public class MyVehicle<TType, TLoc> : IDrive<TType, TLoc> where TLoc: IVehicle, IMove<TType>

这两个TLoc参数是否都继承自IVehicle?另外,TLoc中的一个或两个IMove<TType>是否继承自TLoc

如果两个IVehicle参数都没有从MyVehicle继承,我该如何正确声明?

问题:您如何区分TLoc继承的内容和{{1}}的内容?

(上下文是在现场制作的,目的是为了降低我实际使用的复杂性。通用参数的语法和功能是我的重点)

2 个答案:

答案 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>

然后 可以使用TLoc1TLoc2的不同类型。