Một phần từ một điểm phá vỡ tò mò về quan điểm và một phần từ việc bảo vệ chống lại các vấn đề tiềm ẩn. Hãy tưởng tượng điều tồi tệ nhất có thể xảy ra bằng cách gọi sau đây là những gì (hoặc một cái gì đó tương tự, nhưng string.Empty
là một ví dụ tốt):Ngăn chặn thay đổi giá trị của String.Empty
typeof(String).GetField("Empty",
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Static |
BindingFlags.GetField
).SetValue(null, "foo");
Điều này sẽ gây ra vấn đề khi có mã ở đâu đó mà không x = myClass.bar ?? string.Empty
.
Có cách nào (giống với miền ứng dụng khác hoặc tương tự) để bảo vệ chống lại (hoặc phát hiện) ai đó thay đổi các giá trị như String.Empty
hoặc có lẽ là SqlDateTime.MinValue
(hoặc các trường chỉ đọc tương tự khác trong .NET)?
Có liên quan? http://stackoverflow.com/questions/4447939/is-it-possible-to-disable-reflection-from-a-net-assembly – harold
Bạn không thể ngăn chặn mã đáng tin cậy làm những việc xấu. Và mã không đáng tin cậy không thể sửa đổi 'string.Empty'. Và việc bắn mình vào chân khá rõ ràng trong trường hợp này. – CodesInChaos
Nhân tiện, không phải là trường 'Int.MaxValue' a * constant *? – harold