2010-06-03 6 views
1

Следующий код не компилировать:Ошибка компиляции при использовании Generics C# 3.5

class MyClass<T> : where T : MyClass <T>{} 

Есть ли способ решить эту проблему? я использовал следующий обходной путь, но мне было интересно, если есть лучший способ

class MyClass <T> : IMyClass where T : IMyClass {} 
interface IMyClass {} 
+4

это поможет, если вы приняли ответы на некоторые из ваших предыдущих вопросов ... – thecoop

+2

Можете ли вы объяснить, что вы считаете, что использовать этот любопытный образец имеет? Это пахнет злоупотреблением дженериками. Может быть, лучший способ сделать то, что вы хотите. –

+0

@Eric Lippert: Это стандартный способ ссылаться на «текущий» класс ... как 'this' для текущего объекта. Я считаю, что это на самом деле довольно часто. Почему вы думаете, что это пахнет? – dtb

ответ

5

Вам нужно поставить двоеточие после имени класса, только если вы хотите, чтобы получить класс от базового класса или реализовать интерфейс :

class MyClass<T> where T : MyClass<T> 
//    ↑ 
//    no ':' here