nếu bạn thay đổi giá trị của một const, bạn cần phải xây dựng lại tất cả các khách hàng
Đó không phải là giải pháp đúng. Nếu bạn thay đổi giá trị của một const thì nó không phải là hằng số. Hằng số theo định nghĩa những thứ không bao giờ thay đổi giá trị. Ý tưởng rằng bạn sẽ thay đổi giá trị của một hằng số có nghĩa là bạn đang làm điều gì đó một cách hợp lý không thể, và do đó tất nhiên mọi thứ sẽ bị hỏng; bạn đang làm một cái gì đó mà bạn nói bạn sẽ không làm. Nếu bạn đi xung quanh nói dối với trình biên dịch, và nó đau khi bạn làm điều đó, sau đó ngừng nằm vào trình biên dịch.
Giá vàng không phải là hằng số. Tên ngân hàng của bạn không phải là một hằng số. Số phiên bản của chương trình của bạn không phải là một hằng số. Những thứ này thay đổi, do đó, không làm cho chúng hằng số. Hằng số là những thứ như pi, hoặc số lượng proton trong một nguyên tử vàng.
Biến là những thứ có thể thay đổi - đó là lý do tại sao chúng được gọi là "biến". Hằng số là những thứ ở lại ... liên tục. Nếu nó có thể thay đổi, hãy biến nó thành một biến. Nếu nó là hằng số, hãy biến nó thành hằng số. Nó đơn giản như vậy.
tại sao vậy? cả chỉ đọc và const tĩnh đều tĩnh là
Chắc chắn. Nó phải làm gì với nó? "tĩnh" trong C# có nghĩa là "phần tử được đặt tên được liên kết với loại, thay vì với bất kỳ trường hợp cụ thể nào của loại". ("Tĩnh" do đó là một sự lựa chọn kém của các điều khoản, VB làm tốt hơn với "chia sẻ".)
Cho dù tên được liên kết với loại hoặc một thể hiện không liên quan đến câu hỏi liệu tên đề cập đến một hằng số hoặc biến.
nơi thực sự các giá trị đang được lưu trong cả hai chỉ đọc tĩnh vsconst?
Khi bạn sử dụng giá trị không đổi, giá trị được "nướng" ở bất cứ nơi nào được sử dụng. Đó là an toàn bởi vì nó sẽ không bao giờ thay đổi. Nó sẽ không bao giờ thay đổi bởi vì nó là hằng số và đó là ý nghĩa của "hằng số".
Khi bạn sử dụng biến, giá trị của biến được tra cứu theo thời gian chạy mỗi lần. "chỉ đọc" chỉ có nghĩa là "biến này chỉ có thể được thay đổi trong hàm tạo lớp hoặc trình khởi tạo trường". Nó vẫn là một biến. (*)
cách tạo trường tĩnh chỉ đọc - thực sự giải quyết vấn đề này đằng sau hiện trường?
Bạn chưa nêu vấn đề là gì, vì vậy tôi không biết bạn đang cố giải quyết vấn đề gì.
(*) lĩnh vực chỉ đọc được coi là giá trị không đổi bên ngoài các nhà xây dựng, do đó một lĩnh vực readonly của kiểu giá trị có thể thay đổi không thể được biến đổi, và do đó bạn không thể lấy một ref
đến một readonly và sau đó thay đổi tham chiếu.
Đó là bởi vì trình biên dịch sẽ "nội tuyến" giá trị của hằng số, thay vì tham chiếu một biến đến từ một assembly khác. – ken2k
Không bao giờ biết về hành vi này của các const giữa các hội đồng. Câu hỏi hay –