私はそこに答えがあると確信しています...しかし、 "C#を使用して"グーグルは少し複雑です。プリミティブでないオブジェクトに「使用する」という欠点がありますか?
先日、この便利なテクニックを学び始めました。私のコードに含まれているプリミティブでないオブジェクトには使用しないと愚かなようです。
これはかなり正確な声明であるか、またはほとんどすべてのために「使用する」ことにいくつかの欠点がありますか?
私はそこに答えがあると確信しています...しかし、 "C#を使用して"グーグルは少し複雑です。プリミティブでないオブジェクトに「使用する」という欠点がありますか?
先日、この便利なテクニックを学び始めました。私のコードに含まれているプリミティブでないオブジェクトには使用しないと愚かなようです。
これはかなり正確な声明であるか、またはほとんどすべてのために「使用する」ことにいくつかの欠点がありますか?
他にも言及したように、IDisposable
を実装するタイプについては、using
ステートメントのみを使用できます。 IDisposable
を実装するタイプの場合、私が見た唯一の真の欠点は、using
がタイプのDispose()
メソッドを暗黙的に呼び出すためです。その呼び出しで例外がスローされると、捕捉が困難なことがあります。
それ以外の場合は、よりコンパクトでクリーンなコードを作成するため、try-catch-finallyを使用する代わりにIDisposable
を実装するタイプにはusing
をお勧めします。
編集:が見つかりました。msdn articleがこの点やその他の落とし穴を説明しています。
これは適用できないタイプではコンパイルされないという事実も欠点と考えられます。 –
はい、もちろんです。明確化のために私の答えを編集しました。 –
それはあなたが何を意味するかは明らかではありません - 次のようなステートメントを使用することを意味場合:
using (SomeType x = new SomeType())
{
}
を次にそれがIDisposable
実装にのみ適用さです。
あなたはディレクティブこのような使用することを意味場合:
using System.IO;
を[はい、私は通常、私は特定のソースファイル内で使用したいタイプを含むすべての名前空間のディレクティブを持っています。
"使用する"という使い方の例を挙げることはできますか? – DaveShaw
'using'は' IDisposable'を実装しているオブジェクトに対してのみ動作します。 'いつIDisposableを使うのか検索してみてください。あなたはあなたの答えを見つけるでしょう。 –
C#の 'using'文は、' IDisposable'を実装するクラスでのみ動作します。ブロックの最後に、オブジェクトの 'Dispose()'実装を呼び出すだけです。 –