Продолжая свое путешествие в ref locals, я обнаружил еще одно ограничение, причину которого я не понимаю, а именно: локальные ref должны быть однозначно назначены в момент объявления .
Я понимаю, почему вы не можете инициализировать его ссылкой на переменную, которая не назначена определенно, поскольку это потребует от компилятора каким-то образом связать статусы назначения как переменной, так и локальной ссылки.
object variable;
ref object reference = ref variable;
variable = new object();
// Now `reference` should be definitely assigned,
// so the compiler would have to work some magic to recognize that.
Но почему это незаконно:
object variable = new object();
ref object reference;
reference = ref variable;
Разве компилятор не мог просто рассматривать reference
как любую другую переменную, не назначенную определенно? Это еще более странно, потому что, начиная с C# 7.3, вы можете переназначать ref locals, но это конкретное ограничение все еще остается в силе. Не нарушает ли каким-то образом неинициализированная ссылка IL? Как-то небезопасно допускать существование такой переменной? Или снятие этого ограничения теоретически возможно, но очень сложно/не стоит времени?