2013-08-05 3 views
3

Я пытаюсь преобразовать TexturedCubeexample for monodroid из C# в F # и нажмите на эту строку кода С # (от метода CreateFrameBuffer на PaintingView класс):Как найти происхождение свойства в коде C#?

GLContextVersion <- GLContextVersion.Gles1_1 

В F #, я должен быть явным о происхождение GLContextVersion, но я не могу найти его для любви и денег. Например, если PaintingView реализовал интерфейс, который разоблачил это свойство GLContextVersion, тогда я считаю, что для этого свойства мне нужно будет преобразовать this в этот тип интерфейса.

Согласно документации AndroidGameView (из которого PaintingView происходит) реализует это свойство, но следующий сбой с Error FS0039: The field, constructor or member 'GLContextVersion' is not defined (FS0039) (TexturedCube):

base.GLContextVersion <- GLContextVersion.Gles1_1 

My F # программы работает нормально на моем Nexus 7 без этой линии, но, как педант, я бы хотел, чтобы эта последняя строка была переведена тоже!

+2

Вы не можете «Перейти к определению» по этому поводу? –

+1

@SimonWhitehead: Я пробовал это, и он берет меня в «AndroidGameView.GLContextVersion», но, похоже, он не доступен из F #. –

ответ

3

Может ли GLContextVersion быть защищенным?

Из спецификации F #: Примечание. Семейство и защищенные спецификации не поддерживаются в этой версии языка F #.

Вы можете сделать это, используя отражение.

Как указано в F # spec, вы можете получить доступ, используя Object Expression, защищенные члены во время создания экземпляра. Если вы создаете экземпляр с использованием выражения объекта вместо подкласса, он, похоже, работает. Пример использования Windows Forms:

{ 
    new System.Windows.Forms.Form() with 
     override this.CreateControlsInstance() = 
      System.Windows.Forms.Control.ControlCollection(this) 
} 
+0

Хорошая идея, но как же переход к определению приведет меня к собственности на 'AndroidGameView', которая является' public'? Проблема с выражением объекта заключается в том, что мне, по-видимому, нужен класс с двумя конструкторами, чтобы придерживаться API. –

4

Я только посмотрел на коде в Xamarin (он имеет очень аккуратный браузер сборки, который показывает декомпилированный код!).

Мне кажется, что это свойство действительно не существует в OpenTK-1.0 (по умолчанию используется в Android OpenGL Sample) и выглядит замененным (?) ContextRenderingAPI.

Поэтому код, скорее всего, выглядеть

base.ContextRenderingApi <- GLVersion.ES1 

Глядя на источник, предусмотренном для C# версии оно OpenTK и не OpenTK-1,0 ссылки, так что, скорее всего, ломка изменение API, скорее C#/F # вопрос.

Edit: OpenGL 2.0 Drawing with Monodroid (using OpenTK) Похоже тот же вопрос

Смежные вопросы