2009-06-09 2 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

почему вы это делаете? --- sorry не удержался ;-) – fretje

ответ

11

Просто не хватает аргументов универсального типа:

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

(имена oIt, T, P и obj, вероятно, может быть яснее, но я буду считать, что anonymisation)

+1

Кстати, компилятор не сможет вывести параметры типа для вас, если вы это сделаете. При вызове метода вы должны вручную указать как T, так и P. –

Смежные вопросы