2009-06-09 15 views
0

Il y a un morceau de code que je mettre en œuvre comme cela en java:Generics en C#: « deux niveaux d'indirection »

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

Comment pourrais-je faire cela en C#? J'ai d'abord pensé que ce serait ça:

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

Mais apparemment ma syntaxe est fausse.

des idées? PS: ne me demandez pas pourquoi je suis en train de faire ça. S'il vous plaît :)

+0

pourquoi sont tu fais ça? --- désolé n'a pas pu résister ;-) – fretje

Répondre

11

Manque juste les arguments de type générique:

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

(les noms oIt, T, P et obj pourrait probablement être plus clair, mais je suppose que c'est anonymisation)

+1

Par ailleurs, le compilateur ne sera pas en mesure d'inférer les paramètres de type pour vous si vous faites cela. Vous devez spécifier manuellement T et P lorsque vous appelez la méthode. –