当前位置:  开发笔记 > 编程语言 > 正文

如何使用Reflection在.NET中调用重载方法

如何解决《如何使用Reflection在.NET中调用重载方法》经验,为你挑选了3个好方法。

有没有办法在.NET(2.0)中使用反射调用重载方法.我有一个动态实例化从公共基类派生的类的应用程序.出于兼容性目的,此基类包含2个同名方法,一个包含参数,另一个不包含.我需要通过Invoke方法调用无参数方法.现在,我得到的只是一个错误告诉我,我正试图调用一个模棱两可的方法.

是的,我可以将对象转换为我的基类的实例并调用我需要的方法.最终发生,但现在,内部并发症将无法实现.

任何帮助都会很棒!谢谢.



1> Hallgrim..:

您必须指定所需的方法:

class SomeType 
{
    void Foo(int size, string bar) { }
    void Foo() { }
}

SomeType obj = new SomeType();
// call with int and string arguments
obj.GetType()
    .GetMethod("Foo", new Type[] { typeof(int), typeof(string) })
    .Invoke(obj, new object[] { 42, "Hello" });
// call without arguments
obj.GetType()
    .GetMethod("Foo", new Type[0])
    .Invoke(obj, new object[0]);


您也可以执行Type.EmptyTypes
需要在"typeof(int),typeof(string)"之后编译:)

2> Keith..:

是.调用方法时,传递与所需重载匹配的参数.

例如:

Type tp = myInstance.GetType();

//call parameter-free overload
tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, 
   Type.DefaultBinder, myInstance, new object[0] );

//call parameter-ed overload
tp.InvokeMember( "methodName", BindingFlags.InvokeMethod, 
   Type.DefaultBinder, myInstance, new { param1, param2 } );

如果你以相反的方式执行此操作(即通过查找MemberInfo并调用Invoke),请注意你得到正确的 - 无参数重载可能是第一个找到的.



3> baretta..:

使用带有System.Type []的GetMethod重载,并传递一个空的Type [];

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );


您可以使用Type.EmptyTypes
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有