通过反射访问一个表面上公共的属性

4

大家好,

我正在努力确定在尝试访问类上的公共属性时出现了什么问题。

我的需求非常基本。我有一个公共类,在我的例程中正确实例化,并且我知道,通过反射器,这个类具有我需要引用的属性。

问题是,该属性被定义为:

public Vector3 root {
    [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] get;
    [MethodImpl(MethodImplOptions.InternalCall), WrapperlessIcall] set;
}

我面临的问题是,我试图获取该属性的所有尝试都失败了。 我已经实例化了类型,并尝试使用所有可能的绑定标志进行操作。
Type vtype = myobj.getType()
PropertyInfo[] vproperties;
vproperties = vtype.GetProperties();//(BindingFlags.Default | BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.NonPublic);
for (int vpropertycounter =0 ; vpropertycounter < vproperties.Length ; vpropertycounter++) {
    Console.write( varbodyproperties[varpropertycounter].Name); <= 'root' never appears in this list
}

我的怀疑和疑虑围绕这样一个事实:可能因为getter和setter是‘无包装器’和‘内部的’,所以根属性可能不是‘可见的’。遗憾的是,我不知道是否可以克服这个问题。
我想知道该属性是否可以被任何方式访问,如果可能的话,如何访问。
欢迎提供建议。
提前致谢。
备注:直接寻址该属性,如“myobj.root”会生成编译器错误“未知属性”。
1个回答

1

MethodImplOptions.InternalCall的方法通常是内部框架方法。你不能直接调用它们或通过反射调用(这基本上是一样的)。

这取决于库,我在Word API中发现了类似这样的东西,它在内部使用VB。要访问变量属性,你需要调用一个setter方法。

 Property = "" <- doesn't work
 set_Property("") <- works

取决于您要访问的API,如果这些后继者已经实现,则需要相应的API。除此之外,也可以阅读平台调用教程

感谢您的建议,使我意识到我实际上可以调用setter和getter,这让我明白我在反射迭代中使用了错误的类型! - roamcel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接