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