一般的な質問ではありますが、C ++のような言語はコンストラクターの実行、メモリ管理、未定義の動作などに関して異なるセマンティクスを持っていることを知っているので、私のスコープはむしろC#です。
誰かが私に興味深い質問をしましたが、それは私には簡単には答えられませんでした。
クラスのコンストラクターが終わりのないループ(つまり、ゲームループ)を開始できるようにするのは悪い設計と見なされるのはなぜですか(またはまったくそうではないのですか)。
これによって破られるいくつかの概念があります:
- 最小限の驚きの原則のように、ユーザーはコンストラクターがこのように動作することを期待していません。
- ユニットテストは、このクラスを作成したり、ループを終了しないため挿入したりできないため、より困難です。
- ループの終わり(ゲームの終わり)は、概念的にはコンストラクターが終了する時間であり、これも奇妙です。
- 技術的には、このようなクラスにはコンストラクター以外のパブリックメンバーがありません。これにより、理解が難しくなります(特に実装が利用できない言語の場合)
そして、技術的な問題があります:
- コンストラクターは実際には終了しないため、GCで何が起こるのでしょうか?このオブジェクトは既にGen 0ですか?
- このようなクラスから派生することは、不可能であるか、少なくとも非常に複雑です。これは、基本コンストラクターが決して返さないため
そのようなアプローチでより明らかに悪いまたは不正な何かがありますか?
while(true)
、プロパティセッターにループを入れるのがなぜ悪い考えなのかと尋ねることもできnew Game().RunNow = true
ます。
var g = new Game {...}; g.MainLoop();