Polimorfismo Através de Métodos de Extensão?
Eu tenho uma biblioteca de classes que contêm algumas classes base e outras que são derivadas delas. Nesta biblioteca de classes, estou aproveitando o polimorfismo para fazer o que eu quero. Agora, em um aplicativo consumidor, desejo alterar o comportamento de algum código com base no tipo de tempo de execução das classes filhas. Então, assuma o seguinte:
public class Base { }
public class Child1 : Base { }
public class Child2 : Base { }
Agora, no aplicativo de consumo, desejo fazer algo da seguinte maneira (observe que todas as classes a seguir estão no aplicativo de consumo e não podem ser referenciadas na biblioteca de classes):
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
}
}
}
ATUALIZAR:
Isso não funciona. Ele sempre chama o método de extensão da classe base. Existe alguma outra maneira que me permita fazer isso e evitar ter que verificar explicitamente o tipo de tempo de execução? As razões são porque mais classes que são derivadas doBase
poderia ser adicionado e os métodos de extensão correspondentes poderiam vir de algum outro conjunto externo.
Desde já, obrigado.