Obwohl es sich um eine allgemeine Frage handelt, ist mein Gültigkeitsbereich eher C #, da mir bekannt ist, dass Sprachen wie C ++ unterschiedliche Semantiken in Bezug auf Konstruktorausführung, Speicherverwaltung, undefiniertes Verhalten usw. haben.
Jemand hat mir eine interessante Frage gestellt, die für mich nicht einfach zu beantworten war.
Warum (oder wird es überhaupt als schlechtes Design angesehen?) Sollte ein Konstruktor einer Klasse eine nie endende Schleife (dh eine Spieleschleife) beginnen lassen?
Es gibt einige Konzepte, die dadurch gebrochen werden:
- Wie das Prinzip des geringsten Erstaunens erwartet der Benutzer nicht, dass sich der Konstruktor so verhält.
- Unit-Tests sind schwieriger, da Sie diese Klasse nicht erstellen oder injizieren können, da sie die Schleife nie verlässt.
- Das Ende der Schleife (Spielende) ist dann konzeptionell die Zeit, in der der Konstruktor endet, was ebenfalls ungerade ist.
- Technisch gesehen hat eine solche Klasse keine öffentlichen Mitglieder außer dem Konstruktor, was das Verständnis erschwert (insbesondere für Sprachen, in denen keine Implementierung verfügbar ist).
Und dann gibt es technische Probleme:
- Der Konstruktor ist eigentlich nie fertig. Was passiert also mit GC hier? Ist dieses Objekt bereits in Gen 0?
- Das Ableiten von einer solchen Klasse ist unmöglich oder zumindest sehr kompliziert, da der Basiskonstruktor niemals zurückkehrt
Gibt es etwas offensichtlicher Schlechtes oder Falsches an einem solchen Ansatz?
while(true)
Schleife in einen Eigenschaftssetter einzufügen new Game().RunNow = true
:?
var g = new Game {...}; g.MainLoop();