2017-02-20 4 views
1

私はIDisposableクラスAを持っています。私はクラスBの別のメソッドMの中でAのオブジェクトを使う必要があります。メソッドMは何度も呼び出されます)。 AのローカルオブジェクトをMの中で使い、一度処分するか、Bの中にクラスレベルの静的メンバーを宣言して、アプリケーションが終了したら処分すべきですか? 私が明確でないかどうか教えてください。全体のアプリケーションライフまたはオブジェクト1つにつき1つのオブジェクト+ dispose

+0

なぜBはAのインスタンスをそのコンストラクタで受け取り、必要に応じてMに供給できないのですか?オブジェクトは、そのインタフェースがファクトリメソッドまたはコンストラクタである場合を除いて、パブリックインターフェイスを介して提供されるリソースのクリーンアップを担当します。この場合、呼び出し元が責任を負います。 – hoodaticus

+0

Mへの各呼び出しは、Bの新しいインスタンスを介して行われます。 –

+1

スレッドセーフであると仮定すると、シングルトンのようなサウンドが適切です。 – hoodaticus

答えて

1

アプリケーションの存続期間の1つのオブジェクトはシングルトンです。特定の状況下では便利ですが、一般的には良い考えではありません。理由の詳細については、this questionを参照してください。

IDisposableを実装するクラスは、あなたのために廃棄する世話をするusingステートメントの範囲内で使用することをお勧めします。

明確な例外は、1回のビジネスアクションのコンテキストで、ディスポーザブルクラスへの複数の呼び出しが必要な場合です。そのアクションは、広げすぎてusingステートメントにラップされません。この場合、すべての呼び出しをプライベートメンバーとしての第1の使い捨てクラスにラップします。第二のクラスが処分されるとき、それは使い捨ての私的なメンバーを処分すべきである。

+0

Bの複数のインスタンスに由来するクラスBのメソッドMを呼び出します。 以下のようになります。 B b = new B() b.M() 私はドンを使い捨てにしています。 –

+0

'IDisposable'を実装するクラスがアプリケーションの使用期間中保持され、' using'の内部で使用されないクラスが 'HttpClient'です。詳細は[こちら](https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/)をご覧ください。 –

+0

@BradleyUffnerは私の心の中で最も顕著な例だったので、私は絶対的に話すことができませんでした。 –

関連する問題