2012-01-20 8 views
0

私はそこに答えがあると確信しています...しかし、 "C#を使用して"グーグルは少し複雑です。プリミティブでないオブジェクトに「使用する」という欠点がありますか?

先日、この便利なテクニックを学び始めました。私のコードに含まれているプリミティブでないオブジェクトには使用しないと愚かなようです。

これはかなり正確な声明であるか、またはほとんどすべてのために「使用する」ことにいくつかの欠点がありますか?

+3

"使用する"という使い方の例を挙げることはできますか? – DaveShaw

+1

'using'は' IDisposable'を実装しているオブジェクトに対してのみ動作します。 'いつIDisposableを使うのか検索してみてください。あなたはあなたの答えを見つけるでしょう。 –

+0

C#の 'using'文は、' IDisposable'を実装するクラスでのみ動作します。ブロックの最後に、オブジェクトの 'Dispose()'実装を呼び出すだけです。 –

答えて

2

他にも言及したように、IDisposableを実装するタイプについては、usingステートメントのみを使用できます。 IDisposableを実装するタイプの場合、私が見た唯一の真の欠点は、usingがタイプのDispose()メソッドを暗黙的に呼び出すためです。その呼び出しで例外がスローされると、捕捉が困難なことがあります。

それ以外の場合は、よりコンパクトでクリーンなコードを作成するため、try-catch-finallyを使用する代わりにIDisposableを実装するタイプにはusingをお勧めします。

編集:が見つかりました。msdn articleがこの点やその他の落とし穴を説明しています。

+0

これは適用できないタイプではコンパイルされないという事実も欠点と考えられます。 –

+0

はい、もちろんです。明確化のために私の答えを編集しました。 –

5

それはあなたが何を意味するかは明らかではありません - 次のようなステートメントを使用することを意味場合:

using (SomeType x = new SomeType()) 
{ 
} 

を次にそれがIDisposable実装にのみ適用さです。

あなたはディレクティブこのような使用することを意味場合:

using System.IO; 

を[はい、私は通常、私は特定のソースファイル内で使用したいタイプを含むすべての名前空間のディレクティブを持っています。

関連する問題