2014-12-03 91 views
1

假設你有一個像下面這樣的場景:實現通用接口語法的泛型類型?

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

做既TLoc參數從IVehicle繼承?此外,一個或兩個TLoc繼承自IMove<TType>

如果兩個參數TLoc都不從IVehicle繼承我該如何正確聲明?

問題:你怎麼什麼MyVehicle從繼承和什麼TLoc是區分?

(上下文是在試圖減少對我的實際使用的複雜性做出了當場。泛型參數的語法和功能是我的重點)

+0

只有一個TLoc聲明!其他情況參考了'TLoc'的​​第一個「提及」,它是「TLoc」的聲明。試試這個來明白:'class MyVehicle :IDrive {...}' – 2014-12-03 23:03:06

+0

和兩個類型參數不能有相同的名字,當然這樣也是非法的:'class MyVehicle {...}' – 2014-12-03 23:10:11

回答

1

做既TLoc參數繼承從IVehicle

只有一個TLoc參數,它只用在兩個地方。因此,第二類型參數MyVehicle和第二類型參數IDrive將從IVehicle派生,因爲它們都將引用相同的類型。從IMove<TType>繼承同樣如此。

如何區分MyVehicle是繼承和什麼TLoc是什麼?

MyVehicle類實現了一個用兩個類型參數實例化的通用接口。 TLoc恰好是這些類型參數之一。

+0

所以如果我希望'MyVehicle'和'TLoc'實現'IVehicle'和'IMove '我會做'公共類MyVehicle :IVehicle,IMove ,IDrive 其中TLoc:IVehicle,IMove '正確嗎? (我只是想確保我明白,這對我來說很容易通過例子完成,我並不想這麼困難:D) – Shelby115 2014-12-04 04:30:20

+0

@ Shelby115是的,這是正確的。 – dasblinkenlight 2014-12-04 10:24:14

1

這兩個TLoc參數是否都繼承自IVehicle?

從技術上講,TLoc必須是實現IVehicle的類型或從其「繼承」的其他接口。但是,我以你的方式向你提出「繼承」,然後是的;實際上它們必須是相同的類型。

此外,一個或兩個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