2011-12-15 13 views
2

ウェブサイトが非静的変数を持つ同じ静的メソッドに同時に当たる場合、静的宣言されていないのにこれらの変数は静的ですか?私はそう思うだろうが、私は尋ねなければならなかった。静的初心者:静的なクラス/メソッド内の静的でない変数は静的なことを暗示していますか?

別のオプションは、同じコードの異なる実行が異なる内部変数を持っているので、このコードは、例えば、予期しない文字列の長さを生成しないことを次のようになります。

public static class MyClass 
{ 
    public static int getResult(string ext) 
    { 
     int length = est.length; // One place in RAM or multiple? 
     Thread.Sleep(5000);  // Does this stop program execution for others? 
     return length; 
    } 
} 

質問の要約:

  1. ています静的宣言されていない静的メソッド変数は、静的静的宣言、つまり静的コードの同時実行は互いに影響しますか?
  2. これらの変数にはそれぞれ独自のストレージがありますか?
  3. と静的メソッドのThread.Sleep(5000)はすべてのユーザーの実行を停止しますか?

答えて

5

という変数が表示されています。だから、それらは静的変数ではありません。メソッドを呼び出すたびに(再帰的に呼び出された場合を含む)、新しい変数セットが取得されます。異なるスレッドはではなく、はこれらの変数を共有します。これは、クラスが静的クラスであることとは関係がないことに注意してください。

  • 静的変数は、宣言型自体に関連付けられて宣言する型の特定のインスタンスに関連付けられている彼らに
  • インスタンス変数を宣言する方法に属し

    • ローカル変数、:あなたは区別する必要があります(とない任意の特定のインスタンスを持つ)

    Thread.Sleepのみ現在スレッドの睡眠を作る - アプリケーションが複数のスレッドを持っている場合、他の人はまだだろう実行できる。

  • +0

    TYVM。私はそれを証明するためにLinqPadを使って例を作りました。私は3つのスレッドをカウントダウンし、カウントダウンし、カウントしないで、変数の内容を報告するだけでした。あなたが説明したように働いた。 –

    関連する問題