Как использовать 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 была бы замечательной! Спасибо.
Ответ #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
- Что делать, если ...
Ответ #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 быть обнаружена перегрузка без параметров.
Ответ #3
Ответ на вопрос: Как использовать Reflection для вызова перегруженного метода в .NET
Используйте перегрузку GetMethod, которая 9X_.net-framework принимает System.Type [], и передайте пустой 9X_.net-framework Type [];
typeof ( Class ).GetMethod ( "Method", new Type [ 0 ] { } ).Invoke ( instance, null );
- Вы можете использовать Type.EmptyTypes<p><span c ...
-
5
-
22
-
9
-
2
-
4
-
10
-
3
-
1
-
1
-
6
-
5
-
7
-
5
-
1
-
3
-
1
-
13
-
1
-
14
-
10
-
6
-
7
-
5
-
6
-
10
-
33
-
4
-
7
-
11
-
12
-
3
-
5
-
6
-
4
-
2
-
5
-
11
-
10
-
5
-
3
-
16
-
3
-
4
-
8
-
7
-
5
-
1
-
4
-
7
-
2