У меня очень интересный вопрос, а ответа пока не нашел. Надеюсь, кто-нибудь может мне помочь.
Сначала у меня есть иерархия классов, например
interface IA {}
class A : IA {}
class B : A {}
Далее у меня есть класс с несколькими методами, все с одинаковым именем, но с разной сигнатурой и параметрами производных классов.
class Test
{
public int Method(object dummy) { return 0; }
public int Method(IA dummy) { return 1; }
public int Method(A dummy) { return 2; }
public int Method(B dummy) { return 3; }
}
Компилятор не жалуется, он распознает все разные подписи.
new Test().Method(new Object()) returns 0
new Test().Method(new A() as IA) returns 1
new Test().Method(new A()) returns 2
new Test().Method(new B()) returns 3
все, как я хотел бы ожидать.
Теперь перейдем к моему вопросу. Я должен определить во время отражения, какой из четырех методов лучше всего подходит с его сигнатурой для данного типа параметра, т. Е. Если тип параметра - typeof (A), я должен найти 3-й метод с "фиктивной" сигнатурой.
«IsInstanceOfType» или «IsAssignableFrom» не работают, поскольку «A» также является экземпляром «object». Я могу сначала проверить, точно ли совпадают типы, но это решает проблему, только если я не принимаю интерфейсы.
У кого-нибудь есть предложения?
IA
и устанавливать его значение в конструкторе каждого класса? Затем вы проверяете значение перечисления и вручную вызываете конкретный метод. - person Juan Ferrer   schedule 10.07.2017