Полиморфизм с помощью методов расширения?
У меня есть библиотека классов, которые содержат некоторые базовые классы и другие, которые являются производными от них. В этой библиотеке классов я использую полиморфизм, чтобы делать то, что я хочу. Теперь в потребляющем приложении я хочу изменить поведение некоторого кода на основе типа времени выполнения дочерних классов. Итак, предположим следующее:
public class Base { }
public class Child1 : Base { }
public class Child2 : Base { }
Теперь в приложении-потребителе я хочу сделать следующее: (обратите внимание, что все следующие классы находятся в приложении-потребителе и на них нельзя ссылаться в библиотеке классов):
public interface IMyInterface1 { }
public interface IMyInterface2 { }
public static class Extensions
{
public static void DoSomething(this Base myObj, Object dependency)
{
}
public static void DoSomething(this Child1 myObj, Object dependency)
{
IMyInterface1 myInterface = dependency as IMyInterface1;
if (myInterface != null)
{
//Do some Child1 specific logic here
}
}
public static void DoSomething(this Child2 myObj, Object dependency)
{
IMyInterface2 myInterface = dependency as IMyInterface2;
if (myInterface != null)
{
//Do some Child2 specific logic here
}
}
}
ОБНОВИТЬ:
Это не работает. Он всегда вызывает метод расширения базового класса. Есть ли другой способ, который позволит мне сделать это и избежать необходимости явно проверять тип времени выполнения? Причины в том, что больше классов, которые получены изBase
могут быть добавлены и соответствующие методы расширения могут быть получены из какой-то другой внешней сборки.
Заранее спасибо.