Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET反射的问题_.net_Reflection - Fatal编程技术网

.NET反射的问题

.NET反射的问题,.net,reflection,.net,Reflection,这里有一些关于.NET反射的问题 我有一个在.NET中使用反射的场景:我有一个类,比如说ClassA,它从另一个类ClassA_Base继承了一个方法。两者都在同一个部件中。所讨论的方法接受另一个程序集中的参数、接口、IInterfaceA。现在,当我使用带有LoadFrom方法的反射加载ClassA时,该方法获取了.dll的路径,当我尝试使用该方法时,我得到了一个MissingMethodException,当我在Visual Studio中断行查看基类方法时,它不会显示出来。有趣的是,基类还

这里有一些关于.NET反射的问题

我有一个在.NET中使用反射的场景:我有一个类,比如说ClassA,它从另一个类ClassA_Base继承了一个方法。两者都在同一个部件中。所讨论的方法接受另一个程序集中的参数、接口、IInterfaceA。现在,当我使用带有LoadFrom方法的反射加载ClassA时,该方法获取了.dll的路径,当我尝试使用该方法时,我得到了一个MissingMethodException,当我在Visual Studio中断行查看基类方法时,它不会显示出来。有趣的是,基类还有一些返回IInterfaceA的属性,这些属性会显示出来!我想知道问题是什么

ClassA : ClassA_Base
{
}

ClassA_Base
{
   SomeMethod(IInterfaceA obj); //Doesn't show up
   IInterfaceA SomeProperty{ get; } //Shows up
}
这是使用F实现的,但我相信其行为将与任何其他.NET语言实现相同

提前感谢…

传递BindingFlags值,而不是默认的Type.GetMethod。大概是这样的:

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

抱歉,我不知道如何将其转换为F。

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


出现接口内容的原因是它仍然在具体类上实现。实际上,我所做的不是仅在基础上实现,而是首先使用以下命令创建实例:assembly.CreateInstancetype.FullName,true,BindingFlags.Default,null,constructorparameters,null,null;我如何使您的代码适应这种情况?您需要一个我使用typeof的Type对象,但您可能会使用Assembly.GetType。您可以使用GetMethod来获取该方法,我认为您可以调用该方法的Invoke来执行它。将从CreateInstance获得的实例传递给Invoke方法.Oops。抱歉,我被动态调用的抽象迷住了。我是通过一个动态方法进行调用的。谢谢我现在就试试这个。我将更改F dynamic方法的实现,看看会得到什么。