Когда компилятор С# интерпретирует вызов метода, он должен использовать (статические) типы аргументов, чтобы определить, какая перегрузка действительно вызывается. Я хочу иметь возможность делать это программно.
Если у меня есть имя метода (a string
), тип, который его объявляет (экземпляр System.Type
), и список типов аргументов, я хочу иметь возможность вызвать стандартную библиотечную функцию и верните объект MethodInfo
, представляющий метод, с которым будет ссылаться компилятор С#.
Например, если у меня есть
class MyClass {
public void myFunc(BaseClass bc) {};
public void myFunc(DerivedClass dc) {};
}
Тогда я хочу что-то вроде этой вымышленной функции GetOverloadedMethod
на System.Type
MethodInfo methodToInvoke
= typeof(MyClass).GetOverloadedMethod("myFunc", new System.Type[] {typeof(BaseClass)});
В этом случае methodToInvoke
должен быть public void myFunc(BaseClass bc)
.
ПРИМЕЧАНИЕ: Ни один из методов GetMethod
и GetMethods
не будет служить моей цели. Ни один из них не имеет никакого разрешения перегрузки. В случае GetMethod
он возвращает только точные совпадения. Если вы дадите ему более производные аргументы, он просто ничего не вернет. Или вам может посчастливиться получить исключение двусмысленности, которое не предоставляет никакой полезной информации.