Не удалось понять «Инициализатор поля не может ссылаться на нестатическое поле» Ошибка? - PullRequest
1 голос
/ 29 марта 2010

Я получаю сообщение об ошибке «Инициализатор поля не может ссылаться на нестатическое поле», в то время как Мой код выглядит следующим образом:

Object selectedItem = PageVariables.slectedItemData;
MyClass selectedItems = (MyClass)selectedItem;

Но то же самое работает, если назначить значение в конструкторе или в другом методе, как показано ниже:

public partial class MusicPlayer : Page
{
   Object selectedItem = PageVariables.slectedItemData;
    public MusicPlayer()
      {
        InitializeComponent();
        MyClass selectedItems = (MyClass)selectedItem;
      }
}

Я просто пытаюсь понять, в чем разница, почему он ищет статическое допустимое объявление (в 1-м случае), а не ищет его в конструкторе или в другом методе !!!

Ответы [ 3 ]

5 голосов
/ 29 марта 2010

Проблема не в статическом поле. Это попытка использовать нестатическое поле selectedItem при инициализации другого нестатического поля selectedItems. Это ограничение в C #.

1 голос
/ 29 марта 2010

не так ли, потому что порядок инициализации при использовании в качестве поля не определен, то есть selectedItems может быть инициализирован до selectedItem, что приведет к ошибке (или, по крайней мере, к непредвиденному поведению, что selectedItems был нулевым). Во втором примере порядок специфичен, так что все очень просто.

0 голосов
/ 29 марта 2010

Это ограничение (инициализатор поля не может ссылаться на нестатическое поле) связано с тем, что инициализаторы поля выполняются перед конструкторами. (От производного к базовому, а затем все конструкторы от базового к производному)

...