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)