2

シングルトンオブジェクトと静的クラスの違いを理解しようとして遭遇しました

どこでも見られる最も簡単な情報は、静的クラスはインスタンスを作成しないが、シングルトンはインスタンスを作成する必要があるということです

しかし、なぜ静的クラスから静的コンストラクターを取得できるのでしょうか? どういう意味ですか?インスタンスを作成しませんか?

静的クラスコンストラクターでブレークポイントを使用して単純なコードを実行すると、それに到達することがわかります

私は混乱しています、誰か?

4

2 に答える 2

4

しかし、なぜ静的クラスから静的コンストラクターを取得できるのでしょうか? どういう意味ですか?インスタンスを作成しませんか?

いいえ。静的コンストラクターを使用すると、クラスの静的メンバー (基本的に、そのクラスの静的状態) を初期化できます。

シングルトン パターンでは、静的コンストラクター (または静的インライン初期化子) がインスタンスを作成することがよくありますが、そのインスタンスは通常の非静的コンストラクターを介して作成されます。次に、静的変数 (単一の「インスタンス」変数) 内に格納されます。

遅延初期化シングルトンはそれを回避し、必要に応じて静的変数を初期化します。

静的クラスは別のものです。静的クラスのインスタンスを作成できないため、静的クラスがシングルトンとして機能することはありません。静的クラスは、インスタンスを作成しない場合に使用することを特に意図しています。

シングルトンは (通常) 非静的クラスを持つことによって作成されますが、プライベート コンストラクターを使用します (したがって、インスタンスはそのクラス内でのみ作成できます)。そのクラスの単一のインスタンスを取得するために使用される静的プロパティがあります。クラス インスタンスは、オンデマンドで、または静的コンストラクター内で作成されます。

于 2013-10-07T21:14:19.427 に答える
1

静的コンストラクターは、静的メンバー変数を初期化できる場所にすぎません。静的コンストラクターは必要ありません-代わりに静的メンバー変数をインラインで初期化できますが、それらを静的コンストラクターに入れる方がきれいだと思います。

静的クラスをインスタンス化しない場合でも、その静的メンバーをインスタンス化することを忘れないでくださいそれを行う場所があると便利です。これは、C++ で行う必要がある方法の改善です。

静的コンストラクターを持つために、クラスが静的である必要はないことに注意してください。通常のコンストラクターと静的コンストラクターの両方を提供する非静的クラスを持つことができます。同じルールが適用されます。

于 2013-10-07T21:19:07.010 に答える