Хотя я понимаю, что изменение значения String.Empty
было бы плохой идеей, я не понимаю, почему я не могу этого сделать.
Чтобы понять, что я имею в виду, рассмотрим следующий класс:
public class SomeContext
{
static SomeContext(){}
public static readonly string Green = "Green";
public static readonly SomeContext Instance = new SomeContext();
private SomeContext(){}
public readonly string Blue = "Blue";
public static void PrintValues()
{
Console.WriteLine(new { Green, Instance.Blue, String.Empty }.ToString());
}
}
У меня есть небольшое консольное приложение, которое пытается манипулировать этими тремя полями только для чтения. Он может успешно превратить синий и зеленый в розовый, но Empty остается неизменным:
SomeContext.PrintValues();
/// prints out : { Green = Green, Blue = Blue, Empty = }
typeof(SomeContext).GetField("Blue").SetValue(SomeContext.Instance, "Pink");
typeof(SomeContext).GetField("Green", BindingFlags.Public | BindingFlags.Static).SetValue(null, "Pink");
typeof(String).GetField("Empty", BindingFlags.Public | BindingFlags.Static).SetValue(null, "Pink");
SomeContext.PrintValues();
/// prints out : { Green = Pink, Blue = Pink, Empty = }
Почему?
Изначально я также спросил, почему String.Empty
не является константой. Я нашел ответ на эту часть своего вопроса в другом сообщении и удалил эту часть вопроса).
Примечание. Ни один из "дубликатов" не имеет убедительного ответа на эту проблему, поэтому я задаю этот вопрос.