尽管是一个普遍的问题,但我的范围是C#,因为我知道像C ++这样的语言在构造函数执行,内存管理,未定义的行为等方面具有不同的语义。
有人问我一个有趣的问题,对我来说不容易回答。
为什么(或者根本不?)让类的构造函数开始永无止境的循环(即游戏循环)被认为是不好的设计?
有一些与此有关的概念:
- 像最小惊讶原则一样,用户并不希望构造函数具有这种行为。
- 单元测试比较困难,因为您无法创建此类或将其注入,因为它永远不会退出循环。
- 从概念上讲,循环的结束(游戏结束)是构造函数完成的时间,这也是奇怪的。
- 从技术上讲,此类除了构造函数外没有其他公共成员,这使它很难理解(尤其是对于没有可用实现的语言)
然后是技术问题:
- 构造函数实际上从未完成,所以GC在这里发生了什么?这个对象已经在Gen 0中了吗?
- 由于基本构造函数从不返回,因此无法或至少非常复杂地从此类派生
这样的方法是否存在更明显的弊端或弊端?
while(true)
循环的属性setter: new Game().RunNow = true
?
var g = new Game {...}; g.MainLoop();