Как использовать Отражение для Вызова Overloaded Method in.NET

66
задан Cheeso 1 January 2010 в 19:33
поделиться

3 ответа

Необходимо определить, какой метод Вы хотите:

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]);
107
ответ дан JG in SD 24 November 2019 в 14:59
поделиться

Используйте перегрузку GetMethod, которая берет Систему. Введите [] и передайте пустой Тип [];

typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
5
ответ дан baretta 24 November 2019 в 14:59
поделиться

Да. Когда Вы вызываете передачу метода параметры, которые соответствуют перегрузке, которую Вы хотите.

, Например:

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 и вызова Вызывают) быть осторожной, что Вы получаете правильный - перегрузка без параметров могла быть найденным первым.

17
ответ дан Keith 24 November 2019 в 14:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: