2011-02-02 5 views
0

Предположим, у меня есть общий код interface IMyInterface<TParameter1, TParameter2>.C# общие параметры

Теперь, если я пишу еще один класс, общий на это параметр T:

CustomClass<T> where T : IMyInterface

, как это должно быть сделано?

(текущий код не скомпилируется, поскольку IMyInterface зависит от TParameter, TParameter2).


Я предполагаю, что это должно быть сделано, как:

CustomClass<T, TParameter1, TParameter2> where T: IMyInterface<TParameter1, 
                   TParameter2> 

, но я мог бы быть неправильно, могли бы вы посоветовать мне, пожалуйста?

+0

Ваше предположение верно. –

ответ

4

Это точно так, как вы есть, вы должны указать TParameter1 и TParameter2 общие аргументы в классе, который требует общего ограничения на IMyInterface:

public interface IMyInterface<TParameter1, TParameter2> 
{ 
} 

public class CustomClass<T, TParameter1, TParameter2> 
    where T : IMyInterface<TParameter1, TParameter2> 
{ 

} 

или вы могли бы им исправлено:

public class CustomClass<T> 
    where T : IMyInterface<string, int> 
{ 

} 
0

Вы действительно хотите использовать его в качестве ограничения (с ключевым словом «где»)? Вот некоторые примеры прямой реализации:

interface ITwoTypes<T1, T2> 

class TwoTypes<T1, T2> : ITwoTypes<T1, T2> 

Или, если вы знаете тип (ы) ваш класс будет использовать, вам не нужен параметр типа на класс:

class StringAndIntClass : ITwoTypes<int, string> 

class StringAndSomething<T> : ITwoTypes<string, T> 

Если вы используете интерфейс как ограничение и не знаете, какие типы явно указывать, то да, вам нужно добавить параметры типа в объявление класса, как вы предполагали.

class SomethingAndSomethingElse<T, TSomething, TSomethingElse> where T : ITwoTypes<TSomething, TSomethingElse> 

class StringAndSomething<T, TSomething> where T : ITwoTypes<string, TSomething> 
Смежные вопросы