2016-04-18 4 views
1

Ich habe über static gelesen. Ich weiß, dass es ein Präfix ist, auf das nur Nicht-Objekte zugreifen können. Aber ich kann nicht verstehen, warum Easterstatic sein muss?Warum ist der statische Modifikator in diesem Code erforderlich?

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); 
} 

Ich habe nicht das Konzept der static noch. Kann mir bitte jemand erklären?

+2

Wo ist 'statisch'? –

+0

Um dies zu erreichen, verschieben Sie die Initialisierung in einen expliziten nicht statischen Konstruktor, wie folgt: 'class JsonFile { öffentliche Liste StandardHolidays; öffentliche Liste ChangingHolidays; öffentliche Ostern Ostern; öffentliche DaysToOffset GoodFriday; public JsonFile() {StandardHolidays = neue Liste (); ChangingHolidays = neue Liste (); Ostern = neues Ostern(); GoodFriday = new DaysToOffset ("Karfreitag", Ostern, -2); } 'Wenn Sie mehrere Konstruktorüberladungen definiert haben, vergessen Sie nicht, den': this() '-Konstruktor von überall zu" verketten ". –

Antwort

3

Während der Initialisierung können Sie keine Instanz Easter haben, aber Sie benötigen ein, wenn Sie

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

so Easterstatic um sein muss, dass seine Existenz in GoodFriday gültig wäre.

+0

Können Sie erklären, warum ich keine Instanz von Ostern haben kann? –

+0

Er kann das umgehen, indem er die Initialisierung der Felder (oder sogar nur die vierte) in einen nicht statischen Konstruktor verschiebt. –

+0

@Code_Steel Weil der Compiler diese neu anordnen kann - es gibt keine Garantie, dass 'Ostern' vor' GoodFriday' initialisiert wird, also ohne'Static' zu verwenden, haben Sie möglicherweise eine 'NullReferenceException' erhalten. Lesen Sie die doppelte Frage, die von Oded sehr gut erklärt wurde. – Idos

Verwandte Themen