[英]How do I find the origin of a property in C# code?
我正在嘗試將Monodroid的TexturedCube
示例從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.