是否可以在 VC++/CLI 中重写 IEnumerable?

2024-05-12

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

到目前为止我有:

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

但编译器抱怨 C2393:“托管类型不支持协变返回类型”。

这是否意味着我无法实施IEnumerables 在 C++ 中,或者有解决方法吗?


哎呀,这是一个非常笨拙的错误消息。这是什么really抱怨的是缺少非泛型 System::Collections::IEnumerable::GetEnumerator() 方法的实现。您必须实现它,因为泛型 IEnumerable 接口继承了非泛型接口。当泛型首次添加到 .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();
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 VC++/CLI 中重写 IEnumerable? 的相关文章

随机推荐