2010-08-05 2 views
3

То, что я хочу, чтобы достичь это:Как использовать «где» ключевое слово в C# с общим интерфейсом, и наследование

  • Объявить общий класс (<T>)
  • Иметь " T ", ограниченным типами, которые реализуют IMySpecialInterface <X> (где« X »не является известным типом),
  • И наследуйте класс от родительского класса.

дать неправильный пример:

public class MyClass<T> : MyParentClass where T : IMySpecialInterface<X> 
{ 
... 
} 

Что такое правильный синтаксис для достижения этой цели?

Спасибо.

ответ

12

Вы не можете использовать дженерики, не зная типов, если вы не создали тип во время выполнения.

Лучше подходят бы:

public class MyClass<T, U> : MyParentClass where T: IMySpecialInterface<U> 
{ 

} 

UPDATE или вы могли бы потенциально использовать dynamic?

+0

это не соответствует требованиям. X не известен при создании класса. – Femaref

+0

Тогда он не может этого сделать, если он не динамически создает тип во время выполнения. Компилятор не может скомпилировать неизвестные. –

+0

Вот почему вам нужна нестандартная версия интерфейса, см. [Мой ответ] (http://stackoverflow.com/questions/3419176/how-to-use-the-where-keyword-in-c-with- a-generic-interface-and-inheritance/3419199 # 3419199);) – Femaref

5

Вам необходимо будет определить не общую версию IMySpecialInterface<X>, если вы не предоставите вторичный тип для MyClass. Все это будет выглядеть так, то:

public interface IMySpecialInterface 
{ 
} 

public interface IMySpecialInterface<X> : IMySpecialInterface 
{ 
} 

public MyClass<T> : MyParentClass where T : IMySpecialInterface 
{ 
} 
5
public class MyClass<T, X> : MyParentClass where T : IMySpecialInterface<X> 
{ 
... 
} 
+0

это не соответствует требованиям. X не известен при создании класса. – Femaref

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