일반적인 질문이지만 C ++과 같은 언어에는 생성자 실행, 메모리 관리, 정의되지 않은 동작 등과 관련하여 다른 의미가 있다는 것을 알고 있으므로 내 범위는 C #입니다.
누군가 나에게 쉽게 대답하지 못하는 흥미로운 질문을했다.
클래스의 생성자가 결코 끝나지 않는 루프 (예 : 게임 루프)를 시작하게하는 나쁜 디자인으로 간주되는 이유는 무엇입니까?
이것에 의해 깨지는 몇 가지 개념이 있습니다.
- 최소 놀랍게도의 원리와 같이, 사용자는 생성자가 이런 식으로 행동 할 것을 기대하지 않습니다.
- 루프를 종료하지 않으므로이 클래스를 만들거나 주입 할 수 없으므로 단위 테스트가 더 어렵습니다.
- 그런 다음 루프의 끝 (게임 끝)은 개념적으로 생성자가 끝나는 시간이며 홀수입니다.
- 기술적으로 이러한 클래스에는 생성자를 제외한 공용 멤버가 없으므로 이해하기가 어렵습니다 (특히 구현할 수없는 언어의 경우)
그리고 기술적 인 문제가 있습니다 :
- 생성자는 실제로 완료되지 않으므로 GC는 어떻게됩니까? 이 개체가 이미 Gen 0에 있습니까?
- 이러한 클래스에서 파생하는 것은 기본 생성자가 절대로 반환하지 않기 때문에 불가능하거나 최소한 매우 복잡합니다.
그러한 접근 방식으로 더 분명하거나 나쁜 것이 있습니까?
while(true)
속성 setter에 루프 를 넣는 것이 왜 나쁜 생각인지 물을 수도 있습니다 new Game().RunNow = true
.
var g = new Game {...}; g.MainLoop();