スタックオーバーフロー。変数の非静的クラスを初期化したいとしましょう。そのうちの2つはUserID(int)とMyDictionary(Dictionary)です。この非静的クラスは、静的クラス内で宣言されています(静的クラスのメンバーの1つで初期化されています)。 スクリプトが長く実行され、別のユーザーが同じページにアクセスすると、新しいユーザーが他のユーザーのMyDictionaryの内容を変更する可能性があります。しかし、MyDictionaryは非静的なクラスのため、これがどのように可能であるかわかりません。誰もがこれを理解していますか?ありがとうございました。スタティッククラスのスレッドセーフティのASP.NET非静的クラス
答えて
だから私はこのコードがちょっとこのように見えると思っていますか?あなたは基本的に言っている静的変数と静的クラス内のオブジェクトを宣言することで
public class MyNonStaticClass
{
public int UserID;
public Dictionary<int, string> MyDictionary
= new Dictionary<int, string>;
}
public static class MyStaticClass
{
public static MyNonStaticClass aStaticInstanceOfTheNonStaticClass
= new MyNonStaticClass();
public static void AddToDictionary(int key, string value)
{
aStaticInstanceOfTheNonStaticClass.add(key, value);
}
}
「私のアプリケーションでは、私はこれらのいずれかをしたい、とこれらの一つだけ」。クラスが静的ではないにもかかわらず。それでも静的インスタンスを作成しています。
男、私は約1時間これを考え出し、あなたの答えはそれを確認します。ありがとうございました。 – user1325179
格納するクラスとアクセスするメンバーは静的であるため、単一メモリ空間が使用されます。静的クラスの参照(この場合はローカル、フィールドまたはプロパティ)も静的であると仮定する必要があります(静的でないクラスのインスタンス化であっても)。
クラスが最初に静的である理由は何ですか?共有ロジックを使用している場合は、静的メソッドへの参照によってディクショナリを渡すのはなぜですか?
は、スレッドの安全性に影響しません。静的とは、クラスのメンバー(プロパティ、フィールド、メソッド、またはコンストラクタ)がタイプに関連付けられ、という特定のインスタンスではないことを意味します。
スレッドセーフではない静的コード(あなたの質問に記述するコードのような)を書くことができ、スレッドセーフであるインスタンスコードを書くことができます。逆も同様です。あなたはASP.NETで、ユーザー固有の情報を格納する必要がある場合
public static class MyFoo {
// Just because this is a static property doesn't
// mean the contained dictionary is thread safe!
public static Dictionary<String, String> MyDictionary { get; set; }
public static MyFoo() {
MyDictionary = new Dictionary<String, String>();
}
}
を使用します。ここでは、多かれ少なかれ、私はあなたがやっていると思う何の線に沿って非スレッドセーフ(悪い)コード、いくつかのですセッションオブジェクトまたは(より長寿命のデータの場合)データベース。静的変数に依存しないでください。同時に2人のユーザーが同時にサイトにいる場合はどうなりますか?
- 1. 静的メソッドとスレッドセーフティのローカル変数
- 2. ASP.Netの通常クラス内の静的クラス
- 3. ASP.NETスタティッククラスとasp.netセッション
- 4. C++静的クラスと非静的クラスのメンバ
- 5. 非静的クラスのプロパティへのアクセス
- 6. ASP.NET内の静的内部クラスのスコープ
- 7. Javaの非静的クラスで静的変数を宣言する
- 8. クラス非静的メソッドグローバル関数へのポインタ
- 9. クラスC++での非静的マルチスレッド処理
- 10. 静的なネストされたクラスと非静的なエラー
- 11. 静的子クラスで非静的関数を呼び出すPHP
- 12. 静的クラスで非静的メソッドを実装する方法は?
- 13. 静的クラスC#ASP.NET Webフォームで静的メソッドを呼び出す
- 14. 非静的メンバーがASP.NET MVCアプリケーションのインスタンス間で共有される静的クラスですか?
- 15. 別のクラスの非静的メソッドへの静的参照の作成
- 16. .netの非静的クラスの静的変数のメモリ割り当て
- 17. C++静的非静的
- 18. symfony 1.4のdoctrine生成クラスの静的または非静的関数?
- 19. 非静的メンバーの静的メンバー関数
- 20. 静的関数内の非静的パラメータ
- 21. 非静的メソッドはその静的な?
- 22. 静的/非静的メソッドの問題
- 23. ASP.Netの静的オブジェクト
- 24. 静的メソッドの非表示と非静的メソッドのオーバーライド
- 25. 親クラスとインプリメンテーションインタフェースに同じ名前の静的メソッドと非静的メソッド
- 26. 静的クラスと静的メソッド
- 27. パブリック静的クラスのC#テストプライベート静的メソッド
- 28. 低レベルの違い:静的メソッドを使用した非静的クラスと静的メソッドを使用した静的クラスとの比較
- 29. 静的クラスのメンバ
- 30. 静的クラスのオブジェクトインスタンス
どこから他のユーザーが使用しているサーバーサイドのものを変更できるのでしょうか?私が間違っていなければ、サーバはすべてのユーザのために別々のスレッドとメモリを作ります。また、プライベートクラスが1クラスのみで使用されている場合を除いて、すべてのクラスを別々のファイルに入れることをお勧めします。 – MarioDS