Tại sao trình biên dịch lưu trữ các giá trị không đổi trong siêu dữ liệu lắp ráp? Có phải chúng được nhúng trực tiếp vào mã Ngôn ngữ trung gian từ siêu dữ liệu lắp ráp?
Tại sao trình biên dịch lưu trữ các giá trị không đổi trong siêu dữ liệu lắp ráp? Có phải chúng được nhúng trực tiếp vào mã Ngôn ngữ trung gian từ siêu dữ liệu lắp ráp?
Câu trả lời:
Cách tốt nhất để suy nghĩ về nó tôi tìm thấy là: Tại thời điểm biên dịch, một const được chuyển đổi thành một nghĩa đen nơi nó được sử dụng.
Lý do duy nhất nó đi vào bảng kê khai trong hội đồng mà nó được xác định là để làm cho nó có thể truy cập được cho người tiêu dùng. Nó là một phần của một loại nhất định và siêu dữ liệu của loại đó được lưu trữ trong tập hợp của nó, chứ không phải các tập hợp tiêu thụ nó.
Vì vậy, nó là một nghĩa đen trong tiêu dùng và một loại tài sản hoặc trường đóng gói có thể tiêu thụ trong siêu dữ liệu.
Tôi nghĩ rằng bạn trộn lẫn hai hội đồng.
Hằng số chỉ được lưu trữ trong siêu dữ liệu trong tổ hợp nơi nó được xác định . Siêu dữ liệu chứa thông tin về tất cả các loại và thành viên trong một cụm và hằng số là thành viên.
Không có thông tin về hằng số được lưu trữ trong tổ hợp nơi nó được sử dụng . Giá trị không đổi được sử dụng trực tiếp trong IL giống như bạn đã viết số hoặc chuỗi không đổi trực tiếp trong nguồn.
Một ví dụ: Một trong những ứng dụng của tôi sử dụng rất nhiều hằng số để xác định các bảng và trường cơ sở dữ liệu. Tôi có một hội đồng chỉ chứa tất cả các hằng số.
Khi tôi xây dựng ứng dụng, tôi thêm một tham chiếu đến cụm "hằng" trong Visual Studio. Vì lắp ráp chỉ chứa các hằng số nên không có tham chiếu đến nó trong ứng dụng của tôi và lắp ráp "hằng số" là không cần thiết trong thời gian chạy.
Các hằng số được biết đến tại thời điểm biên dịch và sau đó chúng được lưu trữ trong siêu dữ liệu của lắp ráp. Điều này có nghĩa là bạn chỉ có thể xác định các hằng số cho các kiểu nguyên thủy.
Có, chúng được tải trực tiếp từ siêu dữ liệu. Sẽ không có phân bổ bộ nhớ trong thời gian chạy.