簡體   English   中英

如何在C#代碼中找到屬性的來源?

[英]How do I find the origin of a property in C# code?

我正在嘗試將MonodroidTexturedCube 示例從C#轉換為F#,然后點擊這行C#代碼(來自PaintingView類的CreateFrameBuffer方法):

GLContextVersion <- GLContextVersion.Gles1_1

在F#中,我必須明確GLContextVersion的起源,但我找不到愛情和金錢。 例如,如果PaintingView實現了一個暴露此GLContextVersion屬性的接口,那么我相信我必須this向上轉換為該接口類型才能調用該屬性。

根據文檔, AndroidGameView (從中派生了PaintingView )實現了此屬性,但以下Error FS0039: The field, constructor or member 'GLContextVersion' is not defined (FS0039) (TexturedCube)Error FS0039: The field, constructor or member 'GLContextVersion' is not defined (FS0039) (TexturedCube)

base.GLContextVersion <- GLContextVersion.Gles1_1

我的F#程序在我沒有這條線的Nexus 7上運行得很好,但作為一個學究,我想把這最后一行翻譯過來!

我剛看了Xamarin中的代碼(它有一個非常簡潔的匯編瀏覽器,顯示反編譯的代碼!)。

在我看來,OpenTK-1.0中確實存在該屬性(默認情況下在Android OpenGL示例中引用)並且看起來已被ContextRenderingAPI取代(?)。

因此代碼可能看起來像

base.ContextRenderingApi <- GLVersion.ES1

查看為C#版本提供的源代碼,它是OpenTK而不是引用的OpenTK-1.0,因此很可能是API更改,而不是C#/ F#問題。

編輯: 使用Monodroid的OpenGL 2.0繪圖(使用OpenTK)看起來像是同一個問題

GLContextVersion可以受到保護嗎?

來自F#規范: 注意:此版本的F#語言不支持系列和受保護的規范。

你可以用反射來做。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM