Aunque es una pregunta general, mi alcance es más bien C #, ya que soy consciente de que los lenguajes como C ++ tienen diferentes semánticas con respecto a la ejecución del constructor, la administración de memoria, el comportamiento indefinido, etc.
Alguien me hizo una pregunta interesante que no fue fácil de responder para mí.
¿Por qué (o es en absoluto?) considerado un mal diseño para permitir que un constructor de una clase inicie un ciclo sin fin (es decir, un ciclo de juego)?
Hay algunos conceptos que están rotos por esto:
- al igual que el principio de menos asombro, el usuario no espera que el constructor se comporte de esta manera.
- Las pruebas unitarias son más difíciles ya que no puedes crear esta clase o inyectarla ya que nunca sale del bucle.
- El final del bucle (final del juego) es conceptualmente el momento en que el constructor termina, lo que también es impar.
- Técnicamente, esta clase no tiene miembros públicos excepto el constructor, lo que hace que sea más difícil de entender (especialmente para los idiomas donde no hay implementación disponible)
Y luego están los problemas técnicos:
- El constructor en realidad nunca termina, así que, ¿qué pasa con GC aquí? ¿Este objeto ya está en Gen 0?
- Derivar de tal clase es imposible o, al menos, muy complicado debido al hecho de que el constructor base nunca devuelve
¿Hay algo más obvio que sea malo o tortuoso con tal enfoque?