Tôi đã đọc một số câu hỏi và câu trả lời của Stack Overflow, cùng với một số bài đăng trên blog (bao gồm khởi tạo đơn giản của Jon Skeet), và tất cả dường như đều tập trung vào việc khởi tạo càng lười càng tốt. Có vẻ như về cơ bản có hai tùy chọn để khởi tạo tĩnh:Eager static constructor
- Tại tham chiếu đầu tiên một thể hiện hoặc thành viên tĩnh của một lớp
- Tại một thời gian không xác định giữa sự bắt đầu của chương trình và tài liệu tham khảo đầu tiên.
Có cách nào để có được một constructor tĩnh (hoặc một số hình thức mã khởi tạo) để chạy cho một lớp học đặc biệt (hoặc lớp) vào lúc bắt đầu của chương trình?
Bối cảnh: Thư viện của chúng tôi sẽ phân tích cú pháp XML đến và trả về đối tượng. Loại đối tượng được trả về phụ thuộc vào phần tử XML được phân tích cú pháp. Chúng tôi cung cấp hai lớp đơn giản: một là một lớp rất cơ bản cho phép truy cập vào các attribues và XML bên trong (như một chuỗi), không có tính năng; thứ hai là cho một loại đối tượng cụ thể, và cung cấp kiểm tra ràng buộc và các tên cụ thể theo ngữ cảnh hơn để truy cập/chỉnh sửa các giá trị.
Trình phân tích cú pháp xác định cách phân tích cú pháp một phần tử XML cụ thể bằng cách xem xét danh sách các trình phân tích cú pháp của nó. Nếu nó có một trình phân tích cú pháp cho phần tử nó phân tích cú pháp (được xác định theo tên), nó sử dụng nó. Nếu không, hoặc nếu nó không thành công, nó sẽ rơi trở lại trên trình phân tích cú pháp cơ bản.
Nhà phát triển sử dụng thư viện của chúng tôi rất có khả năng viết các lớp học riêng của họ cho các phần tử XML cụ thể. Thay vì yêu cầu họ thêm phương thức phân tích cú pháp của từng lớp vào danh sách ở đầu mỗi ứng dụng, sẽ rất tuyệt nếu mỗi lớp có thể có một hàm tạo tĩnh để thêm trình phân tích cú pháp của chính nó vào danh sách, dự án sẽ đăng ký nó. Tuy nhiên, các nhà xây dựng tĩnh sẽ không kích hoạt cho đến khi lớp thực sự được tham chiếu và chúng tôi không đảm bảo rằng mọi lớp như vậy sẽ được tham chiếu trước khi bắt đầu phân tích cú pháp.
Có cách nào để đảm bảo một số vụ khởi tạo cho mỗi lớp trong lúc bắt đầu ứng dụng không? Lợi ích của việc này chỉ đơn giản là bao gồm các lớp trong dự án và không phải thêm từng phương thức phân tích cú pháp vào danh sách của trình phân tích cú pháp của chúng tôi khi chạy, đây là một tiện ích khá nhỏ, vì vậy để có được giá trị công việc, giải pháp cần khá đơn giản và dễ thực hiện.
tôi nghĩ rằng những gợi ý dưới đây của phản ánh trên lớp phân biệt (ví dụ như bởi các thuộc tính, lớp cơ sở hoặc giao diện) là hứa hẹn nhất . Bạn có thể đặt mã phản chiếu một số hàm tạo tĩnh của một lớp mà _surely_ được khởi tạo. – Virtlink