Tôi không tin rằng mã được tạo ra sẽ kiểm tra xem lớp đã được khởi tạo mỗi khi nó truy cập một thành viên tĩnh (bao gồm các hàm). Tôi tin rằng việc kiểm tra mọi truy cập sẽ không hiệu quả. Tôi nhìn §17.11 trong ECMA 334 và nó nóiLàm thế nào để C# biết khi chạy một hàm tạo tĩnh?
Việc thực hiện một constructor tĩnh được kích hoạt bởi các đầu tiên của sự kiện sau đây xảy ra trong một miền ứng dụng:
- Một ví dụ của lớp được tạo ra.
- Bất kỳ thành viên tĩnh nào trong lớp đều được tham chiếu.
Có vẻ như cách tìm ra thời điểm 'đầu tiên' xảy ra không được xác định. Tôi không thể nghĩ ra bất kỳ cách nào để làm điều đó nhưng để kiểm tra mọi lúc. Làm thế nào nó có thể được thực hiện?
Có liên quan, đối với trường hợp tĩnh: http://csharpindepth.com/Articles/General/Beforefieldinit.aspx - nó không tầm thường –
Không phải là câu hỏi đặt con trỏ hàm thành vị trí khác sau lần đầu tiên gọi điện? Lúc đầu nó trỏ vào bộ nạp lớp hoặc bất cứ thứ gì, sau đó ở phần thân của hàm ... – user1096188
@Marc: Điều đó thảo luận khi gọi hàm dựng tĩnh TRƯỚC KHI truy cập đầu tiên vào một thành viên tĩnh được cho phép, không phải cách truy cập đầu tiên được phát hiện . –