实现泛型接口语法的泛型类型

本文关键字:泛型类型 语法 泛型接口 实现 | 更新日期: 2023-09-27 18:33:12

假设您有如下所示的场景:

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>

然后,您可以使用不同的类型进行TLoc1TLoc2