2010-12-02 11 views
4

私の生産コードでは、注入することができないので、静的なクラスを使わないでください。デフォルトの初期化を制御することはできません。最後に静的オブジェクトのデストラクタがないので、また、静的クラスのIDisposableを実装することはできません。したがって、静的クラスのようなサウンドは、アンマネージリソースのラッパーとしては決して良いことではありません。 シングルトンは、静的クラスの使用を直接置き換えるための良いソリューションですその場合は。しかし、私の質問は - なぜコンパイラは静的破壊をサポートしていないのですが、それではGCが静的オブジェクトとインスタンスの参照を追跡するのにどのような違いがありますか?なぜ静的デストラクタがないのですか?

答えて

7

"静的オブジェクト"のようなものはありません。しかし、アプリケーションドメインにロードされたすべてのタイプのすべての静的変数は、アプリケーションドメインがアンロードされるまでGCルートとして扱われます。

アプリドメインがアンロードされたときにやりたいことがある場合は、AppDomain.DomainUnloadAppDomain.ProcessExitにサブスクライブすることができます。

+0

+1くそっ...私はもう一度やや遅かった。 –

+0

静的クラスはいくつかのリソース(ファイルハンドラ、pInvoke、何でも)をラップするのに便利な手段であるため、これらのファイルをクリーンアップするにはどうすればよいでしょうか? – dexter

+2

@マックス:私は、とにかくそのような方法でリソースを包むことはありませんが、正直です。特にファイルハンドルはできるだけ早く処分するのが最善です。 –

2

静的デストラクタが必要な場合は、AppDomain.DomainUnloadイベントは機能しませんか?

関連する問題