2011-05-17 29 views
4

请记住,此代码在C#中工作,但不在VC++。net(真气)中。我想知道我的错误在哪里。.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' 必须提供的接口方法“无效ITEST :: AddCriteriaList(系统::集合的实现::一般::名单^)'

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

任何想法?由于

+0

完全不同的语言...... – 2011-05-17 14:11:01

+0

它们非常相似,在这种情况下应遵循相同的编译规则。 – greggorob64 2011-05-17 14:13:05

回答

1

好吧,看来编译就好了,如果你不使用List参数,并只使用T参数。只需将它们全部添加到循环或其他内容中,它只需添加几行额外的代码,但会为您编译。

+1

非常精明。你很聪明。 – greggorob64 2011-05-18 14:30:54

+0

为什么感谢你。这是一个非常精明的陈述。你先生,是我们所有人中最聪明的人。 – espais 2011-05-18 17:04:41

1

我没有对的答案,但这个作品,如果它是配不上你:

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

我很努力地想让任何解决方案都没有iTest本身的通用性。我有一个iTests集合,如果我输入它们,它们必须都具有相同的约束,例如,Dictionary ^>将无法工作。谢谢 – greggorob64 2011-05-17 14:31:21