代码之家  ›  专栏  ›  技术社区  ›  Simsons

无法理解“字段初始值设定项无法引用非静态字段”错误?

  •  1
  • Simsons  · 技术社区  · 15 年前

    我得到错误“字段初始值设定项无法引用非静态字段”,而我的代码如下:

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

    但是,如果在构造函数中或在不同的方法中分配值,同样的事情也会发生,如下所示:

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

    我只是想知道有什么不同,为什么它在寻找一个静态的varaible声明(在第一种情况下),而不是在构造函数或其他方法中寻找它!!!!

    3 回复  |  直到 15 年前
        1
  •  1
  •   Sam Holder Brian Adams    15 年前

    不是因为没有定义用作字段时的初始化顺序,即selecteditems可以在selecteditem之前初始化,这将导致错误(或者至少在意外行为中,selecteditems为空)。在第二个例子中,顺序是具体的,所以所有的东西都是健壮的。

        2
  •  5
  •   Marcelo Cantos    15 年前

    问题不在于静态场。试图使用非静态字段 selectedItem 在另一个非静态字段的初始化中 selectedItems . 这是c中的限制。

        3
  •  0
  •   Art Shayderov    15 年前

    这种限制(字段初始值设定项不能引用非静态字段)与字段初始值设定项在构造函数之前运行的事实有关。(从派生到基,然后从基到派生的所有构造函数)