繁体   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