IEnumerable или свойство List в интерфейсе C#

Я пытаюсь разработать интерфейс на С#, который впоследствии используется в C++ CLI.

Класс командной строки C++, реализующий интерфейс C#, должен иметь свойство, подобное списку, по которому можно выполнить итерацию. Этот класс на самом деле является оболочкой для нативного (если вам нужны все подробности, он содержит указатель на объект Ogre RenderWindow со списком видовых экранов, каждый элемент видового экрана легко доступен через свойство RenderWindow с именем getViewport(int index) ) .

Цель состоит в том, чтобы иметь свойство в интерфейсе И в реализации 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); }
            }
        }

person teodron    schedule 22.06.2012    source источник


Ответы (1)


Если я правильно понял ваш вопрос, вы хотите открыть список видовых экранов. Если это так, то вы можете:

  1. Создайте класс ссылки-оболочки для собственных объектов Viewport (точно так же, как вы делали это для CLIOgreRenderWindow.
  2. Попросите IRenderWindow предоставить IEnumerable с помощью геттера.
  3. В вашей реализации C++/CLI вы можете создать управляемый массив/список объектов-оболочек (на основе собственных объектов) и вернуть его.

В пункте № 3 выше вы можете сделать что-то другое в зависимости от ваших требований (например, вы можете реализовать IEnumerable для получения одного результата за раз, хотя это немного больше работы).

person Matt Smith    schedule 22.06.2012
comment
Спасибо, я сначала попробую более простой подход и посмотрю, не хватает ли ему универсальности. - person teodron; 23.06.2012
comment
Этот подход подойдет, я бы еще рекомендовал его ... спасибо за ответ. - person teodron; 27.06.2012