是否可以在VC ++ / CLI中覆盖IEnumerable?

时间:2015-06-19 11:59:22

标签: .net visual-c++ c++-cli

我有一个返回IEnumerable的接口,我想在VC ++ / CLI中实现它,因为数据来自第三方非托管DLL。

到目前为止,我有:

public ref class MyEnumerable : IEnumerable<SomeType^> {
public:
    virtual IEnumerator<SomeType^>^ GetEnumerator();
}

但是编译器抱怨C2393:&#34;托管类型不支持Covariant返回类型&#34;。

这是否意味着我无法在C ++中实现IEnumerable,还是有解决方法?

1 个答案:

答案 0 :(得分:4)

Yikes,这是一个非常笨拙的错误信息。 真正抱怨的是缺少非泛型System :: Collections :: IEnumerable :: GetEnumerator()方法的实现。您必须实现它,因为通用IEnumerable&lt;&gt; interface继承非泛型的。在.NET 2.0中首次添加泛型时,有些东西是有意义的,而不是今天。我们有点坚持.NET 1.x的遗产。

当你激活你的秘密解码器环时很容易做到,让它看起来像这样:

public ref class MyEnumerable : IEnumerable<SomeType^> {
public:
    virtual IEnumerator<SomeType^>^ GetEnumerator();
private:
    virtual System::Collections::IEnumerator^ GetEnumerator1x() 
               = System::Collections::IEnumerable::GetEnumerator {
        return GetEnumerator();
    }
};