如何在无法访问 Class 类型的情况下获取 class 成员

How to get class members without having access to Class type

我有一个 class (Plug_Comment),其属性作为另一个 class (m_Descriptor) 的成员传递

我也可以得到类型

在里面我可以看到 属性 我需要的(没用的),它是双倍的

但我无法获取它,因为类型 Plug_Comment 在这里未知,所以我无法转换它。

-----编辑----

我会试着再解释一遍。抱歉没说清楚。

我想访问 class 的成员。 class 类型是 Plug_Comment.Cplug_Comment 并且成员名称是双重无用的,这又在 class 属性中;

So namespace = Plug_Comment with inside class Plugin_Comment, inside the class Properties and inside the member double useless 这就是我想要的。

然后,我从代码的另一部分获得了上述属性,但将其转换为一个对象(见上文)。从那里看不到命名空间 Plug_Comment。所以我所拥有的只是对象,我无法将其转换为 Plug_Comment.PluginComment.Properties.

话虽这么说 visual studio 清楚地表明(见图)此对象的类型为 Plug_Comment.properties。

这就是我尝试使用反射的原因。反省不反省怎么弄到双无用?

试试这个:

foreach (var item in m_Descriptor.Properties.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic))
{
    if (item.Name.Contains("useless"))
    {
        double myUseless = System.Convert.ToDouble (item.GetValue(m_Descriptor.Properties));
    }
}

你迭代所有字段(在你的例子中是 1),当名称正确时你得到值

I have a class (Plug_Comment)

您没有 Plug_Comment class。根据您的屏幕截图, Plug_Comment 是一个命名空间。它包含两个 class; CPlug_Comment class 和 properties class。 properties class 包含一个名为 useless 的 属性。

要访问一个名为 useless 的 属性,它属于一个名为 properties 的 class,它位于命名空间 Plug_Comment 中,您可以这样做所以(该示例包括创建 class properties 的实例):

using Plug_Comment;

var instanceOfProperties = new properties();
double uselessValue = instanceOfProperties.useless;

这是一个基于您问题中第一个屏幕截图的示例:

var a = m_Descriptor.Properties.useless;

Я также могу получить тип

由此我们可以得出结论,变量aPlug_Comment命名空间中的properties类型。

因此,变量可以转换为这种类型:

Plug_Comment.properties prps = (Plug_Comment.properties) a;

或:

using Plug_Comment;

     properties prps = (properties) a;

进行此类转换后,您将可以使用“属性”类型的所有 public 成员。 可以获取和设置属性的值,调用方法。

double num = prps.useless;
prps.useless = 123.456;

如果“properties”类型为私有或内部,编译器可能会在此类转换中产生错误。 如果存在该错误,请显示其全文。 在这种情况下,您将不得不使用反射来处理非 public class.