1

.NET 反射的一些问题在这里......

我有一个在 .NET 中使用反射的场景:我有一个类 ClassA,它从另一个类 ClassA_Base 继承了一个方法。两者都在同一个程序集中。有问题的方法需要一个参数,一个接口,IInterfaceA,它在另一个程序集中。现在,当我使用带有 .dll 路径的 LoadFrom 方法的反射加载 ClassA 时,当我尝试使用该方法时,我得到一个 MissingMethodException,当我在 Visual Studio 中断线并查看基类方法。有趣的是,基类也有一些返回 IInterfaceA 的属性,这些属性出现了!我想知道这个问题可能是什么?

ClassA : ClassA_Base
{
}

ClassA_Base
{
   SomeMethod(IInterfaceA obj); //Doesn't show up
   IInterfaceA SomeProperty{ get; } //Shows up
}

这是使用 F# 实现的,但我相信该行为与任何其他 .NET 语言实现相同。

提前致谢 ...

4

2 回答 2

0

通过反射,您仅检索在当前类上实现的方法。这意味着基类中的东西不会出现。如果您想找到一个方法,只需在基类上查找它,然后您就可以在子类上调用它。

接口的东西出现的原因是它仍然在具体类上实现。(而不是只在基地实施)

于 2012-05-09T11:51:04.587 回答
0

代替默认值Type.GetMethod,传递一个BindingFlags值。像这样的东西:

typeof(ClassA).GetMethod("SomeMethod",
                         BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public,
                         null,
                         new Type[] { typeof(IInterfaceA) },
                         null);

抱歉,我不知道如何将其翻译为 F#。

于 2012-05-09T11:38:38.603 回答