0

using キーワードは、マネージド リソースとアンマネージド リソースを適切に破棄するために使用されます。

using キーワードをいつ使用するかについて混乱しています。

たとえば、 using は Connection オブジェクトなどの管理対象リソースに使用されます。

以下のような管理されていないリソースに使用されます。

   using (Font font1 = new Font("Arial", 10.0f)) 
   {
       byte charset = font1.GdiCharSet;
   }

using キーワードを使用する一般的な経験則はありますか? それらが適切に破棄されるように、すべてのオブジェクトに使用する必要がありますか? using キーワードの最有力候補であるオブジェクトをどのように判断できますか?

4

4 に答える 4

5

using を使用する一般的な経験則はありますか?

IDisposableリソースが管理されているか管理されていないかに関係なく、を実装するすべてのクラスで使用する必要があります。

MSDNから:

原則として、IDisposable オブジェクトを使用する場合は、using ステートメントで宣言してインスタンス化する必要があります。using ステートメントは、オブジェクトの Dispose メソッドを正しい方法で呼び出します。また、(前に示したように使用すると)、Dispose が呼び出されるとすぐに、オブジェクト自体がスコープ外になります。using ブロック内では、オブジェクトは読み取り専用であり、変更したり再割り当てしたりすることはできません。

于 2013-01-03T21:07:13.147 に答える
1

通常、クラスが実装するときに使用する必要がありますIDisposableただし、 here で説明されているように、WCFを使用している場合など、回避する必要があるエッジ ケースがいくつかあります。また、クラス内の別の場所にあるオブジェクトにアクセスする必要がある場合は、オブジェクトのスコープが制限されるため使用できずusing、オブジェクトを明示的に破棄する必要があります。

于 2013-01-03T21:09:35.600 に答える
0

上で説明したようなusingキーワードは、スコープ外になったときにfont1でDisposeを呼び出すだけです。

おそらく例外はありますが、クラスがIDisposableを実装するときは、オブジェクトの処理が完了したらDisposeを呼び出す必要があると考えて間違いないと思います。

上に示した構造はあなたのためにそれをします。他の状況では、オブジェクトの存続期間が作成した関数の存続期間を超えているため、を使用できない場合があります。その場合は手動で廃棄するのが賢明です。

よろしく、Marwijn。

于 2013-01-03T21:13:09.510 に答える
0

私の一般的な経験則:使用できる場合は使用してください。

いつから使えますか?要するに、オブジェクトが実装されIDisposable、メソッドが終了するまでにそれを使い終わったときです。

注目すべき例外は、Web サービス クライアント (WCF サービスなど) です。デフォルトの実装では、実際のエラー メッセージが失われる可能性があります。(例: http://www.codeproject.com/Tips/197531/Do-not-use-using-for-WCF-Clientsを参照)

于 2013-01-03T21:08:50.257 に答える