无法理解“字段初始化程序无法引用非静态字段”错误?

时间:2010-03-29 08:05:40

标签: c# asp.net silverlight silverlight-3.0

我收到错误“字段初始化程序无法引用非静态字段”,而我的代码如下:

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

但是,如果在构造函数或其他方法中分配值,同样的方法也适用,如下所示:

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

我只是想了解有什么区别,为什么它在寻找静态变量声明(在第一种情况下)而在构造函数或不同方法中不寻找它!!!

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

不是因为没有定义用作字段时的启动顺序,即selectedItems可以在selectedItem之前初始化,这会导致错误(或者至少在意外行为中,selectedItems为null)。在第二个例子中,订单是特定的,所以一切都是hunky dory。

答案 2 :(得分:0)

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