C#接口中的IEnumerable或List属性

时间:2012-06-22 14:33:38

标签: c# c++-cli ogre

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

实现C#接口的C ++ CLI类需要有一个可以迭代的属性列表。这个类实际上是本机的包装器(如果你想要完整的细节,它包含一个指向具有视口列表的Ogre RenderWindow对象的指针,每个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); }
            }
        }

1 个答案:

答案 0 :(得分:2)

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

  1. 为您的本机Viewport对象创建一个包装器ref类(就像您为CLIOgreRenderWindow所做的那样。
  2. 让IRenderWindow使用getter公开IEnumerable。
  3. 在C ++ / CLI实现中,您可以创建托管对象的托管数组/列表(基于本机对象),然后返回。
  4. 上面的第3项是你可以根据你的要求做一些不同的事情(也就是你可以实现IEnumerable一次产生一个结果 - 虽然这样做的工作量更多)。