型がIDisposableを実装している場合は、自動的に破棄されます。
与えられた:
public class SomeDisposableType : IDisposable
{
...implmentation details...
}
これらは同等です:
SomeDisposableType t = new SomeDisposableType();
try {
OperateOnType(t);
}
finally {
if (t != null) {
((IDisposable)t).Dispose();
}
}
using (SomeDisposableType u = new SomeDisposableType()) {
OperateOnType(u);
}
2つ目は読みやすく維持しやすいです。
Using
呼び出しDispose()
後にusing
コードが例外をスローしても、-blockは残ります。
だからあなたは通常使うusing
IOのように、後から後始末を必要とするクラスのために。
だから、これを使用してブロック:
using (MyClass mine = new MyClass())
{
mine.Action();
}
以下と同じことをします。
MyClass mine = new MyClass();
try
{
mine.Action();
}
finally
{
if (mine != null)
mine.Dispose();
}
を使うusing
ずっと短くて読みやすいです。
mine.Action()
。好きなものmine=null
。地雷を使わずにtry / catchの中で何にでも設定できる - Sam
MSDNから:
.NET Framework共通によるC# 言語ランタイム(CLR)、自動的に 格納に使用されていたメモリを解放します。 不要になったオブジェクト メモリの解放は 非決定論的メモリが解放されました CLRが演じることを決心するときはいつでも ガベージコレクションしかし、それは 通常はリリースを制限するのがベスト ファイルハンドルなどのリソース ネットワーク接続 可能。
usingステートメントは、 いつオブジェクトを指定するかプログラマ リソースを使用している人は解放する それら。使用に供されたオブジェクト ステートメントは実装する必要があります 使い捨てインターフェース。このインターフェース Disposeメソッドを提供します。 オブジェクトのリソースを解放する必要があります。
言い換えれば、using
ステートメントは、.NETに、で指定されたオブジェクトを解放するように指示します。using
不要になったらブロックします。
usingステートメントは、C#でオブジェクトを実装するオブジェクトを操作するために使用されます。IDisposable
インタフェース。
のIDisposable
インターフェースには1つのパブリックメソッドがありますDispose
それはオブジェクトを処分するために使用されます。 usingステートメントを使用するとき、コード内でオブジェクトを明示的に破棄する必要はありません。usingステートメントがそれを処理します。
using (SqlConnection conn = new SqlConnection())
{
}
上記のブロックを使用すると、内部的にコードは次のように生成されます。
SqlConnection conn = new SqlConnection()
try
{
}
finally
{
// calls the dispose method of the conn object
}
詳細については読んでください:C#のusingステートメントを理解する。
usingブロックにコードを配置すると、制御がブロックを離れるとすぐにオブジェクトが確実に破棄されます(ただし必ずしも収集されるわけではありません)。
IDisposableを実装しているメンバーに対してDisposeを明示的に呼び出す必要がないのは、実際には単なる合成糖です。
usingステートメントは、1つ以上のリソースを取得し、ステートメントを実行してからリソースを破棄します。
using
とブロックHttpClient()
!見るこの記事。 - jbyrd