Mặc dù một câu hỏi chung phạm vi của tôi là C # vì tôi biết rằng các ngôn ngữ như C ++ có ngữ nghĩa khác nhau về thực thi hàm tạo, quản lý bộ nhớ, hành vi không xác định, v.v.
Ai đó hỏi tôi một câu hỏi thú vị mà tôi không dễ trả lời.
Tại sao (hoặc hoàn toàn không?) Được coi là thiết kế tồi để cho phép một nhà xây dựng của một lớp bắt đầu một vòng lặp không bao giờ kết thúc (tức là vòng lặp trò chơi)?
Có một số khái niệm bị phá vỡ bởi điều này:
- Giống như nguyên tắc ít ngạc nhiên nhất, người dùng không mong đợi nhà xây dựng hành xử như thế này.
- Các bài kiểm tra đơn vị khó hơn vì bạn không thể tạo lớp này hoặc tiêm nó vì nó không bao giờ thoát khỏi vòng lặp.
- Kết thúc vòng lặp (kết thúc trò chơi) sau đó về mặt khái niệm là thời gian mà nhà xây dựng kết thúc, đó cũng là số lẻ.
- Về mặt kỹ thuật, một lớp như vậy không có thành viên nào ngoại trừ hàm tạo, điều này làm cho nó khó hiểu hơn (đặc biệt là đối với các ngôn ngữ không có triển khai)
Và sau đó là các vấn đề kỹ thuật:
- Các constructor thực sự không bao giờ kết thúc, vậy điều gì xảy ra với GC ở đây? Có phải đối tượng này đã ở Gen 0?
- Xuất phát từ một lớp như vậy là không thể hoặc ít nhất là rất phức tạp do thực tế là hàm tạo cơ sở không bao giờ trả về
Có một cái gì đó rõ ràng là xấu hoặc sai lệch với cách tiếp cận như vậy?
while(true)
vòng lặp trong trình thiết lập thuộc tính : new Game().RunNow = true
?
var g = new Game {...}; g.MainLoop();