2013-08-05 51 views
3

我想給TexturedCubeexample for monodroid從C#到F#轉換並擊中後,該行的C#代碼(從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 

我的F#程序運行在我的Nexus 7只是罰款沒有這一行,但是,作爲一個僧侶,我想把這最後一行翻譯過來!

+2

您不能在這個「去定義」? –

+1

@SimonWhitehead:我試過了,它把我帶到'AndroidGameView.GLContextVersion',但似乎無法從F#訪問。 –

回答

3

GLContextVersion可以保護嗎?

來自F#規範:注意:此版本的F#語言不支持該族和受保護的規範。

你可以使用反射。

由於F#規範提到您可以在實例化過程中使用Object Expression訪問受保護的成員。如果您使用對象表達式而不是子類進行實例化,它似乎工作。使用Windows窗體的例子:

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

好主意,但是如何跳轉到定義將我帶到屬性爲'public'的AndroidGameView?對象表達式的問題是我顯然需要一個帶有兩個構造函數的類來堅持API。 –

4

我只是看着在Xamarin的代碼(它有一個非常整潔的組裝瀏覽器,顯示反編譯的代碼!)。

它看起來像屬性真的不存在於OpenTK-1.0(在Android OpenGL示例中默認引用)並且看起來已被ContextRenderingAPI取代(?)。

因此,代碼可能會看起來像

base.ContextRenderingApi <- GLVersion.ES1 

望着規定的C#版本,它是OpenTK而不是OpenTK-1.0中引用的來源,因此可能是一個打破API的改變,而一個C#/ F#問題。

編輯: OpenGL 2.0 Drawing with Monodroid (using OpenTK) 貌似相同的問題