Dado el siguiente código de cliente:¿Puede un constructor devolver una subclase?
var obj = new Class1();
¿Hay alguna manera de modificar el constructor de Class1 por lo que en realidad se volverá una subclase (o alguna otra implementación alternativa) en su lugar?
Me gustaría obj obtener una de dos implementaciones diferentes, dependiendo de alguna condición. Obviamente, podría cambiar a usar un marco DI o de fábrica, pero me gustaría evitar cambiar el código del cliente, si es posible.
Supongo que la respuesta es no, pero me pregunto si hay alguna manera inteligente de lograrlo.
Estamos considerando agregar una característica "extensión nueva" que básicamente le permitiría hacer un método de fábrica estático que se llamaría cuando se utiliza el "nuevo" operador, de forma similar a los métodos de extensión cuando se llama al ". operador es usado Sería un buen azúcar sintáctico para la fábrica. Si tienes un escenario realmente increíble donde este tipo de patrón sería útil, me gustaría ver un ejemplo. –
@Eric: si bien no es un ejemplo de C# específicamente, me he encontrado con una situación en la que esto sería útil en C++. Estoy desarrollando una biblioteca multiplataforma, y sería realmente útil para un ABC independiente de la plataforma poder devolver una instancia de clase derivada específica de la plataforma de su constructor. Estoy seguro de que debe haber situaciones similares cuando se desarrolla con C#. – Mac
@Eric Lippert - ¡Tengo un escenario del mundo real para ti! http://blog.hackensplat.com/2010/09/construct-something-else-c.html – billpg