Một khác biệt tinh tế nhưng quan trọng là consts
được đánh giá tại thời gian biên dịch, trong khi statics
được đánh giá vào thời gian chạy. Điều này có tác động quan trọng đến việc tạo phiên bản. Ví dụ: giả sử bạn viết:
public const int MaxValue = 100;
Bạn biên dịch và giao hàng lắp ráp (Lắp ráp A). Sau đó, người khác viết một assembly (Assembly B) tham chiếu MaxValue. Trong trường hợp này, giá trị 100 được biên dịch thành assembly của chúng cũng như của bạn.
Nếu bạn đã viết này:
public static readonly int MaxValue = 100;
sau đó tham chiếu trong lắp ráp của họ sẽ vẫn chỉ là một tài liệu tham khảo. Khi ai đó chạy Assembly B, giá trị 100 sẽ được tải từ lắp ráp của bạn, Assembly A.
Điều này có thể ảnh hưởng đến các tình huống vá đơn giản.Nếu bạn phát hành một Assembly A cập nhật, MaxValues được khai báo là 200, và người dùng copy phiên bản đó lên phiên bản trước (nhưng không biên dịch lại B), thì trong kịch bản đầu tiên Assembly B sẽ tiếp tục hoạt động như thể MaxValues là 100, bởi vì đó là giá trị const
được biên dịch thành Assembly B. Trong kịch bản thứ hai, Assembly B sẽ nhận giá trị mới vì nó tải biến không phải là static
khi chạy.
Không có biến số const như vậy. –