У меня есть библиотека классов, которые содержат некоторые базовые классы и другие, полученные из них. В этой библиотеке классов я использую полиморфизм, чтобы делать то, что хочу. Теперь в потребляющем приложении я хочу изменить поведение некоторого кода на основе типа времени выполнения дочерних классов. Поэтому предположим следующее:
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
}
}
}
UPDATE:
Это не работает. Он всегда вызывает метод расширения базового класса. Есть ли другой способ, который позволит мне сделать это и избежать необходимости явно проверять тип выполнения? Причиной является то, что можно добавить больше классов, полученных из Base
, и соответствующие методы расширения могут исходить из какой-либо другой внешней сборки.
Спасибо заранее.