Я понимаю, что об этом уже спрашивали, но я не нашел четкого соглашения о лучшем решении.
Является ли использование динамического (как показано ниже) лучшим способом сделать это?
Я полагаю, что лучше всего избегать динамических изменений, когда это возможно, чтобы помочь выявить проблемы во время компиляции.
(classA1 и classA2 реализуют интерфейс A и аналогично для B)
public static void Foo(InterfaceA a, InterfaceB b)
{
Foo((dynamic)a, (dynamic)b);
}
static void Foo(classA1 a, classB1 b) { //some code }
static void Foo(classA2 a, classB2 b) { //some code }
static void Foo(classA1 a, classB2 b) { //some code }
static void Foo(classA2 a, classB1 b) { //some code }
или аналогично ...
public static void Foo(InterfaceA a, InterfaceB b)
{
((dynamic) a).Foo(b);
}
public classA1
{
void Foo(classB1 b) { //some code }
}
//repeated for other cases