Концептуальная причина «Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство» CS0236 Ошибка

C # не позволяет инициализатору поля экземпляра ссылаться на другое поле. Например, этот код недействителен:

class A
{
 string s1 = "";
 string s2 = s1;
}

потому что "s2" ссылки "s1".

Но почему это не разрешено?

Моя первая мысль заключалась в том, что спецификации C # не гарантируют какой-либо порядок инициализации, но согласно спецификациям этот порядок является порядком объявления:

Инициализаторы переменных выполняются в текстовом порядке, в котором они появляются в объявлении класса.

Итак, если порядок детерминирован, в чем могут заключаться подводные камни такого кода?

Заранее благодарим за помощь.

РЕДАКТИРОВАТЬ:

Согласно ответам Hps , 0xA3 и Питер :

  • порядок инициализации в сценарии наследования может быть очень запутанным ,

  • реализация такой функции потребует некоторых ресурсов от команды разработчиков компилятора с небольшой пользой,

  • невозможно использовать метод или свойства по логическим причинам (спасибо Peter ), поэтому для согласованности то же верно и для полей.

6
задан Pragmateek 26 November 2010 в 15:04
поделиться