2016-04-18 113 views
1

我已阅读约static。我知道这是一个只能由非对象访问的前缀。但我不明白为什么Easter必须是static为什么在这段代码中需要静态修饰符?

class JsonFile 
{ 
    public List<Holiday> StandardHolidays = new List<Holiday>(); 
    public List<ChangingHoliday> ChangingHoliday = new List<ChangingHoliday>(); 

    public static Easter Easter = new Easter(); 
    public static DaysToOffset GoodFriday = new DaysToOffset("Good Friday", Easter, -2); 
} 

我还没有得到static的概念。有人可以解释吗?

+2

“静态”在哪里? –

+0

为了达到这个目的,将初始化移动到显式的非静态构造函数中,如下所示:'class JsonFile { public List StandardHolidays; public List ChangingHolidays; 公众复活节复活节; public DaysToOffset GoodFriday; public JsonFile(){StandardHolidays = new List (); ChangingHolidays = new List (); 复活节=新复活节(); GoodFriday = new DaysToOffset(“Good Friday”,Easter,-2); '如果你定义了几个构造函数重载,不要忘记从任何地方'链接':this()'构造函数。 –

回答

3

在初始化过程中,你不能有Easter实例,但你需要一个当您使用

public DaysToOffset GoodFriday = new DaysToOffset("Good Friday", Easter, -2); 

所以Easter必须是static,以便其在GoodFriday存在将是有效的。

+0

你能解释为什么我不能有一个复活节的例子吗? –

+0

他可以通过将字段的初始化(甚至只是其中的第四个)移动到非静态构造函数中来解决此问题。 –

+0

@Code_Steel因为编译器可以重新排列这些 - 所以不能保证'Easter'会在'GoodFriday'之前被初始化,所以如果不使用'static',你可能会得到'NullReferenceException'。阅读重复的问题,Oded提供了一个很好的解释。 – Idos

相关问题