有一个需求是:我在一个A窗口点击按钮后启动另一个程序B窗口来测试,在A窗口使用反射技术来获取B窗口的信息,代码如下: Assembly asm = Assembly.LoadFrom(applicationPath);
        Type typeUT = asm.GetType(typeName);
                object obj = Activator.CreateInstance(typeUT);
                MethodInfo mi = typeUT.GetMethod("Show",allFlags);
                mi.Invoke(obj,null);
                return obj;
这段代码能够获取A窗口的类型,但是就是不能找到A的窗口方法Show()来显示该窗口出现,程序执行到
typeUT.GetMethod这段代码就直接跳过了,也就是有问题,但是我这样写确实没问题啊,我要得到A窗口的Show()方法,参数第一写方法名,第二个参数allFlags=private static BindingFlags allFlags = BindingFlags.Public | BindingFlags.NonPublic |BindingFlags.Static | BindingFlags.Instance; 请问下各位高手,为什么这段代码得不到A窗口方法啊?

解决方案 »

  1.   

    Show方法的签名是什么样子的?
    GetMethod有其他重载,调用方式比这个简单。
      

  2.   

    Show方法就是没有参数啊?如果我在A窗口显示该窗体,就实例化对象后调用Show()无参数的显示了,那么我发射的时候也无需要写方法参数啊!haukwong,请教你下,你说的<GetMethod有其他重载,调用方式比这个简单>是什么意思啊?
      

  3.   


    如果Show()是一个public方法的话
    你直接typeUT.GetMethod("Show");就可以得到了。
      

  4.   

    终于解决了这个问题,经haukwong提示了下,Show()这个方法有2个方法重载,因此要给他们指定参数才能区分,也可以用new Type[]{}"意为获取空参数的Show方法,也就是可以加载所有的重载方法(大概是这个意思),因此代码应改为:MethodInfo mi = typeUT.GetMethod("Show",allFlags)-->MethodInfo mi = typeUT.GetMethod("Show",ew Type[]{});这样就能加载出窗口显示了,不过还是很谢谢你的提示,3Q.