public class SelfCallingTest
{
private static int counter;
public void SelfCallingMethod(int counter)
{
Console.WriteLine("The input integer is: {0} ", counter);
counter++;
while (counter <= 2)
{
SelfCallingMethod(counter);
}
}
}
上記SelfCallingTestクラスは、静的フィールド名「カウンタ」を有するとSelfCallingMethodは「カウンタ名前整数パラメータを受け取る台無しにされる理由"(同じ名前のような静的インスタンス部材カウンタ) SelfCallingMethodは現在コンソールテストアプリケーションのmain()メソッド方法スコープパラメータ値が同じ名前のインスタンス・レベルの静的フィールドは、クラス内で宣言された場合
static void Main(string[] args)
{
SelfCallingTest sct = new SelfCallingTest();
sct.SelfCallingMethod(0);
Console.Read();
}
から呼び出されている問題は、ループが無限ループに起こっている間ということであるので、カウンタ方式レベル変数の値value = 3に達すると、スレッドコントロールがメソッドから抜け出し、再び再開しますループの実行中にメソッドレベルカウンタ変数が2に設定されている - このカウンタが2に設定されている理由がわかりません。
メソッドパラメータ名カウンタを静的インスタンスフィールド名以外に変更すると、コンソールが0,1,2を印刷しています
私に説明を教えてください。 .NET CLRにTLS(スレッドローカルストレージ?)から値を読み取るバグはありますか?
ループ条件が常に2を評価している間に、メソッドSelfCallingMethodの呼び出しスタックを開始するために、 = 2と無限ループを引き起こすもの。
おそらく、再帰呼び出しで 'while'の代わりに' if'を使用したとしますか? –