2009-06-09 50 views
0

有一段代碼,我會實現這樣的在Java:泛型在C#中:「兩個層次的間接」

public void doIt(T extends MyEventArgs<? extends MyBaseClass> obj) { 
    ... 
} 

我會怎麼做,在C#?我首先想到的是:

public void oIt(T obj) where T : MyEventArgs<P> where P : MyBaseClass { 
    ... 
} 

但是,我的語法很奇怪。

有什麼想法? PS:不要問我爲什麼要這麼做。請:)

+0

爲什麼你這樣做? ---抱歉無法抗拒;-) – fretje 2009-06-09 15:41:50

回答

11

只是缺少泛型類型參數:

public void oIt<T,P>(T obj) 
    where T : MyEventArgs<P> 
    where P : MyBaseClass 
{ 
    ... 
} 

(名稱oItTPobj也許可以更清楚,但我會認爲是匿名化)

+1

順便說一下,如果你這樣做,編譯器將無法推斷出你的類型參數。調用方法時,應手動指定T和P. – 2009-06-09 15:30:36