2016-04-18 20 views
1

私はstaticについて読んだことがあります。私はそれが非オブジェクトによってのみアクセス可能な接頭辞であることを知っています。しかし、私はEasterstaticでなければならない理由を理解できませんか?なぜこのコードで静的修飾子が必要ですか?

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のコンセプトはありません。誰かが説明できますか?あなたがEasterのインスタンスを持つことはできませんが、あなたは

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

を使用するとき、1つを必要と初期化中

+2

「静的」はどこですか? –

+0

これを実現するには、次のように明示的な非静的コンストラクタに初期化を移動します。 'class JsonFile { public List StandardHolidays; 公開リスト ChangingHolidays; 公開イースターイースター; public DaysToOffset GoodFriday; public JsonFile(){StandardHolidays = new List (); ChangingHolidays =新しいリスト(); Easter =新しいEaster(); GoodFriday =新しいDaysToOffset( "Good Friday"、Easter、-2); } 'いくつかのコンストラクタオーバーロードが定義されている場合は、どこからでも':this() 'コンストラクタを「連鎖する」ことを忘れないでください。 –

答えて

3

のでEasterGoodFridayでその存在が有効になるようにするために、staticなければなりません。

+0

私はイースターのインスタンスを持つことができない理由を説明できますか? –

+0

彼はフィールドの初期化(またはその4分の1だけ)を非静的なコンストラクタに移動することで回避できます。 –

+0

@Code_Steelコンパイラはこれらを並べ替えることができるので、 'EasterFirst'が' GoodFriday'の前に初期化されるという保証はないので、 'static'を使わないと' NullReferenceException'を取得している可能性があります。重複した質問を読んでください。それはOdedの大きな説明があります。 – Idos

関連する問題