1

重複の可能性:
C# で IDisposable に対してステートメントを使用するか、Dispose() を呼び出すと、どちらが優れていますか?
C# で "using" ブロックを使用する必要があるのはいつですか?
using if ステートメントを使用していますか?

using適切に、ステートメントをどのように使用しますか? チュートリアルを開いていますが、理解できません。そして、私は実装するための複数の異なる方法を見ることができます. どちらが正しい方法または好ましい方法ですか?

4

5 に答える 5

9

using ステートメントは、IDisposable を実装するすべてのオブジェクト用です。

using (var my_object = new IDisposableObject ())
{

    //do my_object code here.


} //once the program reaches here, it calls my_object.Dispose();

通常、これは、プログラムの終了時に手動で処理 (クローズ) する必要がある接続を持つオブジェクトに使用されます。たとえば、ファイルやデータベースへの接続を開きます。

using ステートメントは、コードにエラーがあっても Dispose を呼び出すため、try catch ステートメントの finally ブロックで Dispose メソッドを呼び出すのと似ています。

例/チュートリアル

于 2010-02-25T14:15:57.210 に答える
1

disposeが呼び出されることを確認するための短い構文です。

using (File f = File.Open("..."))
{

}

と同じです

File f;
try
{
  f = File.Open("...");
}
finally
{
  f.Dispose();
}
于 2010-02-25T14:21:38.107 に答える
0

usingステートメントを使用する基本的な方法は2つあります。MSDNのディレクティブ(C#)を使用して抽出したもの。

  • 名前空間のエイリアスを作成します(エイリアスを使用)。
  • 名前空間での型の使用を許可します。これにより、その名前空間での型の使用を修飾する必要がなくなります(usingディレクティブ)。
于 2010-02-25T14:20:50.160 に答える
0

Kevinの答えを拡張するために、usingステートメントは、オブジェクトのインスタンス化を、finallyセクションのobject Dispose()メソッドを呼び出すtry/finallyブロックに効果的にラップします。

using(myObject m = new myObjecyt())
{
   // Code here
}

と同じです

myObject m = new myObjecyt()
try
{
   // Code here
}
finally
{
   m.Dispose();
}

これは、MSILをチェックすることで確認できます。

于 2010-02-25T14:22:56.240 に答える
0

「Using」キーワードは、.net で特定のことを安全かつ明確に行うのに役立ちます。これは、特定のオブジェクトを適切に破棄しています。.Net でガベージ コレクションがどのように行われるかを学んだことがあるかもしれません。 ただし、他のオブジェクトには、Dispose と呼ばれるメソッドを呼び出す必要があります。ベスト プラクティスは、オブジェクトに Dispose メソッドがある場合は常に、そのオブジェクトの処理が完了したときにそのメソッドを呼び出すことです。

(それらは通常、管理されていないリソースを処理します。これは、.NET ランタイムの制御外にあるメモリまたはその他のコンピューター パーツを使用していることを意味します。したがって、ガベージ コレクションが破棄された .Net オブジェクトに到達すると、これらのリソースを適切に手放すことができなくなります。 . これにより、メモリ リークやその他のあらゆる種類の問題が発生する可能性があります. 良い例は、ADO.NET 接続オブジェクトです. 繰り返し使用しない接続オブジェクトを破棄すると、DB の問題が発生する可能性があります.)

Using キーワードも、この "Dispose" メソッドに関連付けられています。オブジェクトに Dispose メソッドがある場合、( A .) 処理が完了したときに .Dispose を呼び出すか、( B .) そのオブジェクトを使用するコードをUsing ブロック内に配置すると言う方が正確です。Using ブロックは、いくつかのことを行います。

  • コードがブロックの外に移動すると、重要な Dispose メソッドが自動的に呼び出されます。
  • さらに重要なことは、コード ブロックにエラーがある場合でも、Dispose メソッドが呼び出されることです。これが、using ブロックが非常に役立つ理由です。そうしないと、多くのエラー処理コードを挿入する必要があります。

重要なのは、Dispose メソッドを持つこれらのオブジェクトの多くにとって、エラー処理が特に重要であるということです。多くのコードでは、エラー処理は必要ありません。エラーが発生した場合の結果は、実際には問題ではありません。しかし、これらの IDisposable オブジェクトの場合、エラーはしばしば問題になり、大きな問題になる可能性があります。そのため、.Net は、忙しい開発者が最も基本的なエラー処理を追加して先に進むための構文を提供します。少なくとも Using ブロックから始めてください。後で、より洗練されたエラー処理に移行するかもしれませんが、少なくともこの基本的な安全性は確保されています。

ここに Using キーワードの良い説明があります。

于 2010-02-25T14:24:41.200 に答える