Meskipun pertanyaan umum ruang lingkup saya agak C # karena saya sadar bahwa bahasa seperti C ++ memiliki semantik yang berbeda mengenai eksekusi konstruktor, manajemen memori, perilaku tidak terdefinisi, dll.
Seseorang bertanya kepada saya pertanyaan menarik yang bagi saya tidak mudah dijawab.
Mengapa (atau itu sama sekali?) Dianggap sebagai desain yang buruk untuk membiarkan konstruktor kelas memulai loop yang tidak pernah berakhir (yaitu loop game)?
Ada beberapa konsep yang dirusak oleh ini:
- seperti prinsip yang paling mengejutkan, pengguna tidak mengharapkan konstruktor berperilaku seperti ini.
- Tes unit lebih sulit karena Anda tidak dapat membuat kelas ini atau menyuntikkannya karena tidak pernah keluar dari loop.
- Akhir dari loop (akhir permainan) kemudian secara konseptual adalah waktu di mana konstruktor selesai, yang juga aneh.
- Secara teknis kelas seperti itu tidak memiliki anggota publik kecuali konstruktor, yang membuatnya lebih sulit untuk dipahami (terutama untuk bahasa di mana tidak ada implementasi tersedia)
Dan kemudian ada masalah teknis:
- Konstruktor sebenarnya tidak pernah selesai, jadi apa yang terjadi dengan GC di sini? Apakah objek ini sudah ada dalam Gen 0?
- Berasal dari kelas semacam itu tidak mungkin atau paling tidak sangat rumit karena fakta bahwa konstruktor dasar tidak pernah kembali
Apakah ada sesuatu yang lebih buruk atau licik dengan pendekatan semacam itu?
while(true)
loop dalam setter properti: new Game().RunNow = true
?
var g = new Game {...}; g.MainLoop();