Anche se una domanda generale il mio ambito è piuttosto C #, sono consapevole che linguaggi come il C ++ hanno semantica diversa per quanto riguarda l'esecuzione del costruttore, la gestione della memoria, il comportamento indefinito, ecc.
Qualcuno mi ha fatto una domanda interessante che per me non è stata una risposta facile.
Perché (o lo è per niente?) considerato un cattivo design per consentire a un costruttore di una classe di avviare un ciclo infinito (ad es. il loop di gioco)?
Ci sono alcuni concetti che sono infranti da questo:
- come il principio del minimo stupore, l'utente non si aspetta che il costruttore si comporti in questo modo.
- I test unitari sono più difficili in quanto non è possibile creare questa classe o iniettarla poiché non esce mai dal ciclo.
- La fine del ciclo (fine del gioco) è quindi concettualmente il momento in cui termina il costruttore, che è anche dispari.
- Tecnicamente una classe di questo tipo non ha membri pubblici tranne il costruttore, il che rende più difficile da capire (specialmente per le lingue in cui non è disponibile alcuna implementazione)
E poi ci sono problemi tecnici:
- Il costruttore non finisce mai, quindi cosa succede con GC qui? Questo oggetto è già in Gen 0?
- Il derivare da una classe di questo tipo è impossibile o almeno molto complicato a causa del fatto che il costruttore di base non restituisce mai
C'è qualcosa di più evidentemente cattivo o subdolo con un simile approccio?