C# не допускает экземпляра поле инициализатора ссылаться на другое поле. Например, этот код не действует:Концептуальная причина «поле инициализатора не может ссылаться на не-статическое поле, метод или свойство» CS0236 Ошибки
class A
{
string s1 = "";
string s2 = s1;
}
, потому что "s2" ссылки "s1".
Но почему это не разрешено?
Моя первая мысль была о том, что # спецификации C не гарантируют никакого порядка инициализации, но по спецификации заказа порядок декларирования:
Переменная инициализаторы выполняются в текстовом порядке которые они появляются в объявлении класса.
Таким образом, если заказ детерминирован, каковы могут быть подводные камни такого рода кода?
Заранее за вашу помощь.
EDIT:
Согласно ответам Hps, 0xA3 и Петр:
Порядок инициализации в сценарии наследования может быть очень запутанным,
, реализующий такую функцию, требуют определенных ресурсов из команды разработчиков компилятора для мало пользы,
это не представляется возможным использовать метод или свойства логических причин (спасибо Петр), так что для последовательности то же самое верно и для полей.
Стоит отметить, что vb.net запускает инициализаторы полей после создания базового объекта и позволяет им ссылаться на объект, который строится. Я считаю это хорошей вещью, особенно в тех случаях, когда между полями существует инвариантная связь. Было бы даже лучше, если бы разоблачение параметров конструктора инициализаторами полей было менее неуклюжим. – supercat 2013-05-09 18:23:30