Рассмотрим следующий код С#:
using System;
class Program
{
static string string1 = "AAA";
static string string2 = string1 + string3;
static string string3 = "BBB";
static void Main()
{
Console.WriteLine(string2);
}
}
Я написал код такой, как сегодня, и ожидал, что string2
будет содержать значение AAABBB
, но вместо этого он просто содержал AAA
. Я сделал некоторое чтение о порядке инициализации статических переменных, но мне кажется предпочтительнее, чтобы во время компиляции был сформирован некоторый тип предупреждения или ошибки.
Два вопроса:
-
Почему такой код разрешен для компиляции? (и если ответ таков: "потому что, как написано спецификацию С#", то почему это было написано именно так? Существуют ли причины, по которым я не понимаю, почему это не всегда всегда просто бросает ошибку времени компиляции?)
-
Есть ли способ получить предупреждение о компиляции или какой-либо другой флаг, если я в дальнейшем нечаянно напишу этот код в будущем?