3

このサイトまたは CodeProject のどこかで、適切なルールは、MSIL に変換されたキーワードを使用すると、try/finally が次のようなものをブロックするため、キーワードを使用するよりも IDisposable インターフェイスを実装している場合にのみ有効であると読みました。

try
{
   //some logic 
}
finally
{
   if (obj != null)
      {
         obj.Dispose();
      }
}

しかし、Entity Framework のチュートリアルを見ていると、次のようなものに出会いました。

using(SampleBEntities db = new SampleBEntities()){//some logic here} 

SampleBEntities は ObjectContext から継承し、MSDN lib ObjectContext では IDisposable を実装していませんか?

4

1 に答える 1

6

はい、IDisposableインターフェースを実装しています。

public class ObjectContext : IDisposable

MSDN を確認する

Dispose()インターフェイスの実装に由来するメソッドがありIDisposableます。

あなたが述べたように実装されていない場合は、そのまま実行すると、コンパイルさえされません。

ステートメントの使用

Using はスコープを定義し、その外側でオブジェクトが破棄されます。

C# は、.NET Framework 共通言語ランタイム (CLR) を通じて、不要になったオブジェクトの格納に使用されているメモリを自動的に解放します。メモリの解放は非決定論的です。CLR がガベージ コレクションの実行を決定するたびに、メモリが解放されます。

using ステートメントを使用すると、リソースを使用するオブジェクトがリソースを解放するタイミングを指定できます。using ステートメントに提供されるオブジェクトは、IDisposable インターフェイスを実装する必要があります。このインターフェイスは、オブジェクトのリソースを解放する Dispose メソッドを提供します。

using ステートメントは、using ステートメントの最後に到達したとき、または例外がスローされ、ステートメントの最後より前に制御がステートメント ブロックを離れた場合に終了できます。

于 2012-07-03T18:32:25.163 に答える