如何使用reflection在.NET中调用重载的方法
有没有办法在.NET(2.0)中使用reflection调用一个重载的方法。 我有一个应用程序dynamic实例化派生自一个公共基类的类。 出于兼容的目的,这个基类包含两个同名的方法,一个带有参数,另外一个没有。 我需要通过Invoke方法调用无参数方法。 现在,我得到的只是一个错误,告诉我我试图调用一个模糊的方法。
是的,我只能将该对象作为我的基类的一个实例,并调用我需要的方法。 最终会发生,但现在,内部并发症是不会允许的。
任何帮助将是伟大的! 谢谢。
你必须指定你想要的方法:
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 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),要小心你得到正确的一个 – 无参数的重载可能是第一个find的。
使用带有System.Type []的GetMethod重载,并传递一个空的Type [];
typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
- 在.NET中CultureInfo的CurrentCulture和CurrentUICulture属性有什么区别?
- 如何在.NET MySqlCommand中使用MySql用户定义的variables?
- 为什么.NET在某些类中使用int而不是uint?
- 不使用msiexec从命令行卸载MSI文件
- 为什么Path.Combine不正确连接以Path.DirectorySeparatorChar开头的文件名?
- 内部.NET Framework数据提供程序错误1025
- 如何将char转换为int?
- 为什么Attributes.IsDefined()缺less重载?
- 在ASP.NET中,什么时候应该使用Session.Clear()而不是Session.Abandon()?