2016-10-09 10 views
-1

私はskiPlanクラスにはprivate static int lastNumberprivate int numberのフィールドを持っています。クラス内メソッドスコープ外の属性値を保持

私は、オブジェクトのコンストラクタは以下の通りです。この

public void upLastNumberByOne() 
{ 
    lastnumber++; // Increment the lastNumber by 1 
} 

のような方法があります:

public skiPlan() 
{ 
    upLastNumberByOne(); 
    this.number= lastnumber; 
} 

ここでは、ものです:

私が作成するたびにオブジェクトlastNumber -fieldの値を1だけインクリメントする必要があります。

Interlockedクラスを使用してこれを行う方法が見つかりました。

質問は、どうしたらいいですか?

+2

文脈がなければ、あなたが必要とする答えを確実に知ることは不可能です。あなたのコードがシングルスレッドの場合、 'Interlocked'はまったく必要ありません。上に示したようにフィールドを増分することができます。 'upLoadNumberByOne()'メソッドが2つ以上のスレッドで同時に呼び出せれば、何種類かの同期化が必要であり、このシナリオでは 'Interlocked'が最適です。なぜそれを使用したくないのですか?他のメカニズムもありますが、「連動」よりもむしろ選択する正当な理由はありません。あなたの質問はあまり明確ではありません。あなたの実際の_goal_は何ですか? _problem_は何ですか? –

+0

コードはシングルスレッドですが、マルチスレッドアプリケーションのコーディング方法はまだ学習されていません。目標は、lastNUmberの値を取得し、上記の方法を使用して1をインクリメントするコンストラクタを持つことです。私が直面している問題は、オブジェクトが作成されたときにlastNumberプロパティの値がゼロに戻ることです。 therfor、私は私のオブジェクトのinstanciations全体の価値を維持する方法を探しています。結果はobject1.lastnumber = 1となり、2回目にオブジェクトをインスタンス化すると、object2.lastnumber = object1.lastnumber + 1になります。 –

+3

アプリケーションが 'lastNumber'をゼロにリセットする方法はありません静的でアプリがシングルスレッドのときおそらく、あなたは 'lastNumber'を他のどこかで0に設定していますか? – HimBromBeere

答えて

0

lastnumberとnumberの宣言で "private"を "public"に変更し、インスタンスの代わりにskiPlanクラスを参照できます。

+0

この回答は理にかなっていません。フィールドのアクセシビリティは無関係です。_ "skiPlanクラスを参照する"とは、クラス名を使用して一部のメンバーにアクセスすることを意味します。クラスメンバーにアクセスする方法は、メンバーが静的か非静的かによって決まりますそれを他の方法で参照しても、コードが実際に何を行うかには影響しません。どのような方法でも、この質問に対する質問に答えることはできません。また質問する必要はありません。上記の質問にはどんな質問がありますか? –

関連する問題