Câu trả lời:
constngụ ý static(bạn không cần một ví dụ để tham khảo các constgiá trị).
Tôi cũng muốn bổ sung thêm điểm quan trọng này: Khi bạn liên kết với (tham chiếu) một hợp ngữ với a public const, giá trị đó sẽ được sao chép vào hợp ngữ của bạn. Vì vậy, nếu constgiá trị trong assembly được tham chiếu thay đổi, thì assembly của bạn sẽ vẫn có giá trị được biên dịch ban đầu.
Nếu hành vi này là không thể chấp nhận được, thì bạn nên cân nhắc việc biến trường thành một public static readonlytrường.
Lib.dll, được cung cấp dưới dạng nhị phân:
public class Foo {
public const int HATS = 42;
public static readonly int GLOVES = 33;
}
App.exe, tham chiếu Lib.dll:
Foo.HATS // This will always be 42 even if the value in Lib.dll changes,
// unless App.exe is recompiled.
Foo.GLOVES // This will always be the same as Foo.GLOVES in Lib.dll
Từ MSDN :
Đừng tạo một hằng số để đại diện cho thông tin mà bạn muốn thay đổi bất cứ lúc nào. Ví dụ: không sử dụng trường hằng số để lưu trữ giá dịch vụ, số phiên bản sản phẩm hoặc tên thương hiệu của công ty. Các giá trị này có thể thay đổi theo thời gian và bởi vì trình biên dịch truyền các hằng số , các mã khác được biên dịch với thư viện của bạn sẽ phải được biên dịch lại để xem các thay đổi.
Từ DotNetPerls :
DLL. Khi bạn sử dụng một
consttrường hoặc khai báo, trình biên dịch C # thực sự nhúngconsttrực tiếp giá trị của biến vào mã IL. Do đó, về cơ bản, nó xóa bỏconstnhư một thực thể riêng biệt.Thận trọng: Nếu các chương trình phụ thuộc vào a
constkhông được biên dịch lại sau khiconstgiá trị thay đổi, chúng có thể bị hỏng [ vì chúng sẽ tiếp tục sử dụng giá trị trước đó ].
Một hằng số là tĩnh theo định nghĩa.
Hằng số không thể được thay thế trong mã trong quá trình biên dịch, không phải thời gian chạy, vì vậy không có yêu cầu đối với định nghĩa tĩnh so với phiên bản.
Tất cả các khai báo hằng là tĩnh hoàn toàn và đặc tả C # nói rằng việc bao gồm (dư thừa) của sửa đổi tĩnh bị cấm. Tôi tin rằng điều này là để tránh sự nhầm lẫn có thể xảy ra nếu người đọc nhìn thấy hai hằng số, một được khai báo là tĩnh và một không được khai báo - họ có thể dễ dàng cho rằng sự khác biệt về đặc tả ngụ ý sự khác biệt về ngữ nghĩa. Phải nói rằng, không có sự cấm chỉ định thừa một công cụ sửa đổi truy cập cũng là công cụ sửa đổi mặc định, nơi có sự lựa chọn. Ví dụ, một phương thức (cụ thể) có thể được đánh dấu rõ ràng là riêng tư mặc dù đó là phương thức mặc định. Quy tắc dường như là khi không có lựa chọn nào (ví dụ: khai báo phương thức trong giao diện) thì công cụ sửa đổi thừa bị cấm. Nơi nào có sự lựa chọn, nó được phép.