クラスのインスタンスを作成すると、そのインスタンス内のすべての変数はそのインスタンスに固有であり、インスタンスが有効範囲外になると強制終了されます。しかし、それは静的な方法でどのように機能しますか? 2人が正確に同時にSystem.Math.Abs()を呼び出すとします。ランタイムは2人の呼び出し元をどのように区別しますか?これはスレッキングが入っている場所ですか?呼び出し元ごとに個別のスレッドが自動的に作成されますか?C#で静的メソッドを呼び出すとどうなりますか?
答えて
メソッド変数の有効期間に関して、静的メソッドと非静的メソッドの間には実質的な違いはありません。どちらの場合も、実装の詳細としてがありますが、ローカルには(一般的には必ずしも例外ではありません)スタックに割り当てられています。スタックはスレッド単位であるため、ローカルメソッド変数はスレッド間でクロスオーバーしません。
ここでインスタンスと静的の間の唯一の違いは、インスタンスメソッドに暗黙の0パラメータ(別名「this」)があり、呼び出し元によってプッシュされます(プラスいくつかの仮想ディスパッチとヌルチェックの楽しみです)。簡単にするために
、私はあなたのクラスのインスタンスを作成すると、インスタンスが外にあるとき、そのインスタンスに固有のすべての変数が殺され
ありがとうございました! – developer747
クラスのインスタンスが存在しなくても、クラスのすべての静的メンバーが存在します。最初の使用の前にいつでも初期化され、プログラムが完了するとクリーンアップされます。
静的メソッドを2回同時に呼び出すと、クラスの静的メンバーの同じコピーを使用しています(使用している場合)。したがって、静的メソッドが静的メンバ(またはパラメータ)上で動作する場合、スレッドセーフな方法で静的メソッドを実行する必要があります。静的メソッドがローカルでのみ動作する場合、メソッド自体は通常スレッドセーフです。
ランタイムが2人の呼び出し元を区別する方法については、これがスレッドの本質です。各スレッドには、ローカル変数、パラメータ、戻りアドレスなどの独自のコピーを持つ独自の呼び出しスタックがあります。したがって、2つの呼び出しは混乱することなく、呼び出し元に正しく戻ります。スレッドセーフではないスタティックメンバ(またはスレッドセーフではないパラメータ)に対して静的メソッドが動作しているかどうかが問題です。
良い説明ジェームズ。ありがとう。あなたはちょうど私に言ったことを人々はどうやって知っていますか?このようなファンダメンタルズを扱う素晴らしい本をお勧めしますか? – developer747
CompSciの私の学士号はプログラミング言語理論とプログラミング言語の自己学習のコースです。実際に詳細を知りたい場合は、C#言語仕様を読んで、実装について知っておくべきことをすべて説明します:http: //msdn.microsoft.com/en-us/library/ms228593.aspx –
あなたの学部の書籍の1つ(このような基本を扱う)を推薦しなければならない場合は、それは何ですか? – developer747
など反復子ブロック、撮影した変数を、オーバー光沢よ範囲。
変数 - 通常「フィールド」と呼ばれるが、インスタンスの後寿命を割り当て解除されます。 スコープは、コンパイラが名前で何かを認識するプログラムテキストの領域です。 リフトは、のの部分であり、その間に格納場所が有効です。スコープと寿命はしばしば混乱します。
しかし、静的メソッドではどのように機能しますか?
スタティックフィールドの有効期間は制限されません。格納場所は、フィールドがアクセスされる前のある時点で作成され、appdomainが解体されるまで破棄されません。
2人がSystem.Math.Abs()を正確に同時に呼び出すとします。
OK。それはどうやって提案するのですか?
ランタイムは2人の呼び出し元を区別しますか?これはスレッキングが入っている場所ですか?
静的メソッドは、メモリ内の数値である機械命令の束に組み込まれます。実行の各スレッドは、命令ポインタと呼ばれる現在の命令を特定する番号を有する。 2つの異なるスレッドは、同時に同じ静的メソッド内にある命令ポインタを持つことができます。
発信者ごとに個別のスレッドが自動的に作成されますか。
質問には意味がありません。 2人の発信者が同時に別のスレッドにない場合、どのようにしてを同時に取得しましたか?
- 1. C#で静的メソッドを呼び出す
- 2. C#静的メソッドを呼び出す
- 3. 静的クラスC#ASP.NET Webフォームで静的メソッドを呼び出す
- 4. 静的メソッドで非静的GetType()を呼び出しますか?
- 5. C++から静的C++/CLIメソッドを呼び出す
- 6. クラスで静的メソッドを呼び出す?
- 7. ヌルオブジェクトで静的メソッドを呼び出す
- 8. Javaで静的メソッドを呼び出す
- 9. コンストラクタで静的メソッドを呼び出す
- 10. 静的メソッド呼び出し
- 11. 静的メソッド呼び出し
- 12. ArrayList.add()メソッドを呼び出すとどうなりますか?
- 13. 静的メソッドから静的関数ポインタを呼び出す
- 14. Obj-C内から静的Swiftメソッドを呼び出す
- 15. 静的メソッドを呼び出すsymfony DI
- 16. 静的メソッドを呼び出すユニットテストコード
- 17. WPFで非静的メソッドを呼び出す静的プロパティ
- 18. 静的関数をメソッド名で呼び出しますか?
- 19. 静的サブクラスの静的メソッドを呼び出す際のNullPointerException
- 20. 静的メソッドから非静的メソッドを呼び出す静的メソッドで作成されたUSINGインスタンス
- 21. インスタンスを介して静的メソッド内で静的メソッドを呼び出す方法
- 22. なぜタイプパラメータで静的メソッドを呼び出すことが可能ですか?
- 23. C#で静的メソッド内で静的メソッドを呼び出すのは、クラスインスタンス経由で可能です。
- 24. Gradleから静的なJavaメソッドを呼び出す方法
- 25. C#で別のクラスから非静的メソッドを呼び出すにはどうすればよいですか?
- 26. ASMXから静的メソッドを呼び出す落とし穴
- 27. 静的メソッドを呼び出すクラスとメソッドを取得するにはどうすればよいですか?
- 28. AndroidネイティブのC++コードから静的なJavaメソッドを呼び出す
- 29. JPQLで静的Javaメソッドを呼び出すことはできますか
- 30. オブジェクトインスタンスとサイドノートで静的メソッドを呼び出すJava
[this](http://stackoverflow.com/questions/680546/static-function-concurrency-asp-net)はあなたの質問に答えていますか? –
.ToStringは静的メソッドではありません。 –
エマニュエル、あなたが言いました投稿をチェックしました。それは私の心配に対処していますが、それは答えています。( – developer747