Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实现泛型接口语法的泛型类型?_C#_Generics_Inheritance_Multiple Inheritance - Fatal编程技术网

C# 实现泛型接口语法的泛型类型?

C# 实现泛型接口语法的泛型类型?,c#,generics,inheritance,multiple-inheritance,C#,Generics,Inheritance,Multiple Inheritance,假设您有如下场景: public class MyVehicle<TType, TLoc> : IDrive<TType, TLoc> where TLoc: IVehicle, IMove<TType> 公共类MyVehicle:IDrive,其中TLoc:IVehicle,IMove 两个TLoc参数是否都继承自i车辆?另外,一个或两个TLoc是否继承自IMove 如果两个TLoc参数都不是从IVehille继承的,我如何正确声明 问题:您如何区分My

假设您有如下场景:

public class MyVehicle<TType, TLoc> : IDrive<TType, TLoc> where TLoc: IVehicle, IMove<TType>
公共类MyVehicle:IDrive,其中TLoc:IVehicle,IMove
两个
TLoc
参数是否都继承自
i车辆
?另外,一个或两个
TLoc
是否继承自
IMove

如果两个
TLoc
参数都不是从
IVehille
继承的,我如何正确声明

问题:您如何区分MyVehicle继承自什么和TLoc是什么

(上下文是为了降低实际使用的复杂性而当场编造的。通用参数的语法和功能是我的重点)

两个
TLoc
参数是否都继承自
i车辆


只有一个
TLoc
参数,它只在两个地方使用。因此,
MyVehicle
的第二个类型参数和
IDrive
的第二个类型参数都将从
IVehicle
派生,因为它们都是指相同的类型。从
IMove
继承也是如此

您如何区分MyVehicle继承自什么和TLoc继承自什么

MyVehicle
类实现了一个用两个类型参数实例化的通用接口
TLoc
恰好是这些类型参数之一

两个TLoc参数是否都继承自IVehile

从技术上讲,
TLoc
必须是实现
iVihicle
的类型,或者是从中“继承”的另一个接口。但我认为你是“继承”的,那么是的;事实上,它们必须是同一类型

另外,是否有一个或两个TLoc从IMove继承

两者都是,在你“继承”这个词的意义上

如果两个TLoc参数都不是从IVehile继承的,我如何正确地声明它

嗯,这里只有一个TLoc,所以我不知道你的意思。不能在类及其实现的接口中使用其他泛型参数

您可以向类中添加其他泛型参数:

public class MyVehicle<TType, TLoc1, TLoc2> 
    : IDrive<TType, TLoc1> 
    where TLoc1: IVehicle, IMove<TType>
    where TLoc2: IVehicle, IMove<TType>
公共级MyVehicle
:IDrive
TLoc1:IVehicle,IMove在哪里
TLoc2:IVehicle,IMove在哪里

然后您可以为
TLoc1
TLoc2

使用不同的类型只有一个
TLoc
声明!其他事件指的是
TLoc
的第一次“提及”,即
TLoc
的声明。请尝试理解:
class MyVehicle:IDrive{…}
当然,两个类型参数不能具有相同的名称,因此这也是非法的:
class MyVehicle{…}
因此,如果我想
MyVehicle
TLoc
实现
IVehicle
IMove
我会做
公共类MyVehicle:IVehicle,IMove,IDrive where-TLoc:IVehicle,IMove
正确吗?(我只是想确保我能理解,这对我来说是最容易通过示例来完成的。我不是想难懂:D)