我收到错误“字段初始化程序无法引用非静态字段”,而我的代码如下:
Object selectedItem = PageVariables.slectedItemData;
MyClass selectedItems = (MyClass)selectedItem;
但是,如果在构造函数或其他方法中分配值,同样的方法也适用,如下所示:
public partial class MusicPlayer : Page
{
Object selectedItem = PageVariables.slectedItemData;
public MusicPlayer()
{
InitializeComponent();
MyClass selectedItems = (MyClass)selectedItem;
}
}
我只是想了解有什么区别,为什么它在寻找静态变量声明(在第一种情况下)而在构造函数或不同方法中不寻找它!!!
答案 0 :(得分:5)
问题不在于静态字段。尝试在另一个非静态字段selectedItem
的初始化中使用非静态字段selectedItems
。这是C#中的限制。
答案 1 :(得分:1)
不是因为没有定义用作字段时的启动顺序,即selectedItems可以在selectedItem之前初始化,这会导致错误(或者至少在意外行为中,selectedItems为null)。在第二个例子中,订单是特定的,所以一切都是hunky dory。
答案 2 :(得分:0)
该限制(字段初始值设定项不能引用非静态字段)与字段初始值设定项在构造函数之前运行的事实有关。 (从派生到基础,然后从基础到派生的所有构造函数)