0

我正在尝试在 C# 中设计一个以后在 C++ CLI 中使用的接口。

实现 C# 接口的 C++ CLI 类需要有一个可以迭代的类似列表的属性。这个类实际上是一个原生的包装器(如果你想要完整的细节,它包含一个指向 Ogre RenderWindow 对象的指针,该对象有一个 Viewports 列表,每个 Viewport 项目都可以通过一个名为 getViewport(int index) 的 RenderWindow 属性轻松访问) .

目标是在接口和该接口的 C++ CLI 实现中拥有一个属性,以便它可以与for each构造一起使用。最干净的方法是什么?

讨论项目的一些片段:

C#接口

public interface IRenderWindow
    {
         bool IsActive { get; set; }
    }

和 C++ CLI 实现者

public ref class CLIOgreRenderWindow : public IRenderWindow
        {
        private:
            Ogre::RenderWindow * mRenderWindow;
        public:
            CLIOgreRenderWindow();

            virtual property bool IsActive 
            {
                bool get() sealed {return mRenderWindow->isActive();}
                void set(bool value) sealed { mRenderWindow->setActive(value); }
            }
        }
4

1 回答 1

2

如果我正确理解您的问题,您想公开视口列表。如果是这种情况,那么您可以:

  1. 为您的本机 Viewport 对象创建一个包装器 ref 类(就像您为 CLIOgreRenderWindow 所做的那样。
  2. 让 IRenderWindow 公开一个带有 getter 的 IEnumerable。
  3. 在您的 C++/CLI 实现中,您可以创建包装对象的托管数组/列表(基于本机对象),然后返回它。

上面的第 3 项是您可以根据您的要求做一些不同的事情的地方(即您可以实现 IEnumerable 以一次产生一个结果——尽管这需要更多的工作)。

于 2012-06-22T17:04:12.610 回答