Как использовать Reflection для вызова перегруженного метода в .NET

Есть ли способ вызвать перегруженный метод 9X_overload с помощью отражения в .NET (2.0). У меня 9X_invoke есть приложение, которое динамически создает 9X_reflection экземпляры классов, производных от общего 9X_overload базового класса. В целях совместимости этот 9X_reflection базовый класс содержит 2 метода с одинаковыми 9X_dot-net именами, один с параметрами, а другой без. Мне 9X_dot-net нужно вызвать метод без параметров через 9X_reflect метод Invoke. Прямо сейчас я получаю только 9X_function-overloading сообщение об ошибке, говорящее о том, что 9X_dotnet я пытаюсь вызвать неоднозначный метод.

Да, я 9X_dot-net мог просто привести объект как экземпляр моего 9X_.net базового класса и вызвать нужный мне метод. В 9X_reflection конце концов это произойдет, но сейчас внутренние 9X_function-overloading сложности не позволят этого.

Любая помощь 9X_.net была бы замечательной! Спасибо.

78
0
3
Общее количество ответов: 3

Ответ #1

Ответ на вопрос: Как использовать Reflection для вызова перегруженного метода в .NET

Вы должны указать, какой метод вы хотите:

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]);

9X_dotnet

128
3

  • Что делать, если ...

Ответ #2

Ответ на вопрос: Как использовать Reflection для вызова перегруженного метода в .NET

Да. При вызове метода передайте параметры, соответствующие 9X_.net желаемой перегрузке.

Например:

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 } );

Если вы сделаете 9X_reflection это наоборот (например, найдя MemberInfo 9X_overload и вызовите Invoke), будьте осторожны, чтобы 9X_dotnet получить правильный вариант - первой может 9X_function-overloading быть обнаружена перегрузка без параметров.

17
0

Ответ #3

Ответ на вопрос: Как использовать Reflection для вызова перегруженного метода в .NET

Используйте перегрузку GetMethod, которая 9X_.net-framework принимает System.Type [], и передайте пустой 9X_.net-framework Type [];

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

5
1

  • Вы можете использовать Type.EmptyTypes<p><span c ...