web-dev-qa-db-ja.com

C#の静的クラスとシングルトンクラス

重複の可能性:
すべての静的メソッドとシングルトンパターンの適用の違いは何ですか?

静的またはシングルトンのどちらを使用するかについて、現在取り組んでいるプロジェクトについて決定を下す必要があります。

this のような記事を読んだ後、私はシングルトンを使用する傾向があります。

静的クラスまたはシングルトンを使用する方が良いですか?

編集1:クライアントサーバーデスクトップアプリケーション。

コード指向のソリューションを提供してください。

5
radu florescu

シングルトンを使用すると、コードはより柔軟になります。

利点は、シングルトンを使用するコードが、それがシングルトンか一時オブジェクトかを知る必要がないことです。静的クラスを使用すると、静的メソッドを明示的に呼び出す必要があります。たとえば、依存性注入について考えます。

さらに、非静的クラスとしてのシングルトンは、引き続きインターフェースを実装したり、継承をサポートしたりできます。たとえば、静的クラスを継承してその中の仮想メソッドをオーバーライドすることはできません。

8
Martin Haluza

私はマーティンが言ったことすべてに同意します、それに+1します。少し付け加えると、今日のアプリケーションにはグローバル共有オブジェクトがあり、明日は複数のインスタンスを作成することにしたと考えてください。

シングルトンを使用する場合は、コンストラクターをパブリックにするだけです。ただし、静的クラスを使用する場合は、変更をより煩わしいものにする必要があります。

また、ユニットテストをコードに追加することを決定した場合、シングルトンインスタンスを偽のインスタンスに置き換えることは、すべてがグローバルデータを共有する一連の静的関数を処理する必要がある場合に比べてはるかに簡単です(1か所で変更)。

5
DXM

Webアプリケーションであるか、スタンドアロンデスクトップアプリケーションであるかについては言及していません。

それがWebアプリケーションの場合、特に静的変数と静的メソッドも使用している場合、静的クラスは(共有データのため)並行環境でいくつかの大きな問題を引き起こす可能性があります。

1
RPK