C # общие параметры - PullRequest
       14

C # общие параметры

0 голосов
/ 02 февраля 2011

Допустим, у меня есть некоторый универсальный interface IMyInterface<TParameter1, TParameter2>.

Теперь, если я пишу другой класс, универсальный по его параметру T:

CustomClass<T> where T : IMyInterface

как это сделать?

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


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

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

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

Ответы [ 2 ]

4 голосов
/ 02 февраля 2011

Точно так же, как у вас, вам нужно указать универсальные аргументы 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 голосов
/ 03 февраля 2011

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

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...