Скажем, у меня простая (самая простая?) программа на С#:
class Program {
static void Main() {
System.Console.WriteLine("Hello, world");
}
}
Если я скомпилирую этот код и посмотрю на полученный .exe, я вижу строку "Hello, world" в EXE-изображении, как ожидалось.
Если я реорганизую код на:
class Program {
const string Greeting = "Hello, world";
static void Main() {
System.Console.WriteLine(Greeting);
}
}
Если я скомпилирую этот код и посмотрю на полученный .exe, я дважды вижу строковый литерал "Hello, world" в EXE-изображении. Это было удивительно для меня. У меня создалось впечатление, что строковые литералы были разделены, и что это могло бы появиться только в изображении один раз. Может кто-нибудь объяснить это? Возможно, эта вторая копия строки необходима для метаданных отражения?