如何在C#代码中找到属性的来源
本文关键字:属性 代码 | 更新日期: 2023-09-27 18:26:28
我正试图将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)
中失败:
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)
}