Các ý của bạn thì tôi không có gì phản biện cả.

Nếu bạn lấy mã nguồn rồi xây dựng trên VSX của bạn mà nó chạy đúng thì tôi thấy cách tính toán bên trong của mình là đúng. Nội dung chương trình phải đúng trước đã rồi ta chau chuốt nó sau khi có thời gian. Tôi rất thích nếu thấy bạn chỉ ra logic sai đại loại như "cách tính địa chỉ của MHoang không chính xác","phương thức này nên cho kế thừa","chia nhỏ tập tin cho dễ kiểm soát" chẳng hạn. Chờ thêm các góp ý của bạn.

PS: Mã nguồn này nếu đưa vào các phiên bản < VS2015 thì chắc nó sẽ không biên dịch, phải sửa lại đôi chút khi khởi tạo hằng trong các lớp (hiểu thêm khác biệt cũng tốt).