【问题标题】:.net interfaces with generic methods, errors in implementation.net 与泛型方法的接口,实现中的错误
【发布时间】:2011-08-27 06:47:08
【问题描述】:

请记住,此代码在 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 ^)”提供实现

奇怪的是,如果我删除 IUseInterface 上的通用约束 (Q),错误就会消失。我不明白如何让我的类泛型与特定函数上的泛型有任何关系。

有什么想法吗?谢谢

【问题讨论】:

  • 完全不同的语言...
  • 它们非常相似,在这种情况下应该遵循相同的编译规则。

标签: c# .net visual-c++ generics interface


【解决方案1】:

好吧,如果您不使用 List 参数,并且只使用 T 参数,它似乎编译得很好。只需将它们全部添加到循环中或其他东西中,它会增加几行额外的代码,但会为您编译。

【讨论】:

  • 为什么谢谢你。这是一个非常精明的说法。先生,您是我们所有人中最精明的人。
【解决方案2】:

对此我没有答案,但如果它对你来说足够好的话,这是可行的:

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)
   {
   }
};

【讨论】:

  • 我正在努力让任何解决方案都没有 iTest 本身是通用的。我有一个 iTest 集合,如果我键入它们,它们都必须具有相同的约束,例如 Dictionary^> 将无法正常工作。不过谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
相关资源
最近更新 更多