Hôm nay tôi có một chút ngạc nhiên khi tôi thay đổi giá trị của hằng số hiển thị công khai trong một lớp tĩnh và sau đó thay thế một bản sao cũ của phiên bản bằng phiên bản mới được biên dịch. Điều ngạc nhiên là chương trình hiện tại tham chiếu đến hội đồng không nhận giá trị mới của hằng số. Đó là, tôi đã không biên dịch lại file thực thi mà chỉ thay thế một assembly.Trong .NET, tại sao các hằng số được đánh giá tại thời gian biên dịch chứ không phải thời gian JIT?
Một mô tả đầy đủ các thử nghiệm của tôi là tại How constant is a constant?
tôi sẽ thừa nhận là rất ngạc nhiên bởi hành vi này. Tôi hiểu điều gì đang xảy ra nhưng tôi không hiểu lý do tại sao. Có một lý do kỹ thuật cụ thể tại sao hằng số không thể được chọn vào thời gian JIT thay vì biên dịch thời gian? Có trường hợp nào làm điều đó sẽ phá vỡ mọi thứ?
Đây là một hành vi được thảo luận trong quá nhiều sách, bài đăng trên blog, vì vậy nó không phải là đáng ngạc nhiên trên thực tế :) –
@Lex: Nhưng kỳ lạ, tôi 'd không bao giờ chạy qua một cuộc thảo luận về nó trước đây. Tôi vẫn tự hỏi * tại sao *. –
Tôi vẫn không nhận được những lợi thế của việc nướng nó vào lắp ráp bằng cách sử dụng là. – CodesInChaos