.net интерфейсы с общими методами, ошибки в реализации - PullRequest
4 голосов
/ 17 мая 2011

Имейте в виду, этот код работает в C #, но не в VC ++. Net (бесит). Мне интересно, где моя ошибка здесь.

С учетом кода:

public interface class iTest
{
   public:
   generic <typename T>
   virtual void AddCriteriaList(List<T> ^CriterionList);
};

generic <typename Q>
public ref class IUseInterface : iTest
{
   public:
   generic <typename T>
   virtual void AddCriteriaList(List<T> ^CriterionList)
   {

   }
};

Я получаю сообщение об ошибке C3766: «IUseInterface» должен предоставить реализацию для метода интерфейса «void iTest :: AddCriteriaList (System :: Collections :: Generic :: List ^)»

Странная вещь: если я удалю универсальное ограничение (Q) на IUseInterface, ошибка исчезнет. Я не понимаю, как создание общего класса моего класса НИЧЕГО связано с универсальным типом для конкретной функции.

Есть идеи? Спасибо

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Что ж, кажется, что все прекрасно скомпилируется, если вы не используете параметр List, а просто используете параметр T. Просто добавьте их все в цикле или что-то в этом духе, это несколько строк дополнительного кода, но скомпилирует для вас.

1 голос
/ 17 мая 2011

У меня нет ответа на этот вопрос, но это работает, если вам этого достаточно:

generic <typename T>
public interface class iTest
{
   public:
   virtual void AddCriteriaList(List<T> ^CriterionList);
};

generic <typename Q, typename T>
public ref class IUseInterface : iTest<T>
{
public:
   virtual void AddCriteriaList(List<T> ^CriterionList)
   {
   }
};
...