2011-01-20 18 views
1

私は学校でのプロジェクトに取り組んでいます(CISで私のBAのために働いています)。クラス関数。C#「非静的フィールドにオブジェクト参照が必要です」静的メンバー関数のクラス問題

public static int GetNumberCreated() 
    { 
     // return the total number of airplanes created using the class as the blueprint 

     return numberCreated; // returns the number of airplanes created 
    }//end of public int GetNumberCreated() 

これは、この小さなC#プログラムでこれまでに作った飛行機の数を返します。 私が先頭にnumberCreatedを宣言:

private int numberCreated; 

私は古典的なエラーを取得する私は理解しようと研究のまともな量をやった「オブジェクト参照が非静的フィールド、メソッド、またはプロパティのために必要とされます」何が起こっているが、私は何も出てきていない。

フォームが変数にアクセスできるようになるように、私はしかし、クラスの一番下にプロパティを設定しました:

public int NumberCreated { get; set; } 

私はまた、これにプロパティを変更しようとしました:

public int NumberCreated { get { return numberCreated; } set { numberCreated = value; } } 

運がありません。 >。> '

私は間違っていますか?

答えて

5

作成した番号をstaticとして宣言する必要があります。

eg public static int NumberCreated {get;set;} 

あなたは非静的メソッドから静的メンバにアクセスすることができますが、静的メソッドから非静的メンバにアクセスするカント。例えば、静的メソッドからインスタンス変数にアクセスすることはできません。

+0

ありがとう^ _^'私はそれが私が行方不明だったことは信じられません。みんなありがとう。 –

1

それは簡単なことだ - あなたはそうのように、あなたのメソッドのシグネチャの前に「静的」キーワードを追加する必要があります。そして、あなたがそうのように/デクリメントをインクリメントすることができます

public static int NumberCreated { get; set; } 

AirplaneFactory.NumberCreated++/AirplaneFactory.NumberCreated-- 
1

GetNumberCreated静的メソッドです。 numberCreatedは、このクラスのオブジェクトで作成される変数です。したがって、静的メソッドは、そのような変数がないため、どこを見ているのかわかりません。

private static intが必要です。

0

「numberCreated」がまだ存在しない場合でも、静的メソッドを呼び出すことができます。コンパイラーは、それが生まれたという事前の保証なしに赤ちゃんを返そうとしていると伝えています。

変更番号は静的プロパティに変更され、コンパイルされます。

関連する問題