C# не позволяет инициализатору поля экземпляра ссылаться на другое поле. Например, этот код недействителен:
class A
{
string s1 = "";
string s2 = s1;
}
потому что "s2" ссылается на "s1".
Но почему это запрещено?
Моей первой мыслью было то, что спецификации C# не гарантируют никакого порядка инициализации, но согласно спецификациям порядок соответствует порядку объявления:
Инициализаторы переменных выполняются в текстовом порядке, в котором они появляются в объявлении класса.
Итак, если порядок детерминирован, какие могут быть подводные камни такого типа кода?
Заранее спасибо за помощь.
ИЗМЕНИТЬ:
Согласно ответам Hps, 0xA3 и Peter:
порядок инициализации в сценарии наследования может быть очень запутанным,
реализация такой функции потребует некоторых ресурсов от команды разработчиков компилятора для небольшой пользы,
невозможно использовать метод или свойства по логическим причинам (спасибо, Питер), поэтому для согласованности то же самое верно и для полей.