2

IDisposable を実装するクラスの MemoryStream オブジェクトで "using" を使用した後、どのように Dispose メソッドを実装できますか?

public class ControlToByte :IDisposable
{
    public static byte[] GetByte(object control)
    {
        using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream())
        { //do something here  } 
public void Dispose()
    {
       //how do you dispose of memorystream object?
    }
4

1 に答える 1

6

を実装する必要も、明示的IDisposeに呼び出す必要もありません。Disposeブロックは、using完了後に破棄されることを保証しMemoryStreamます。usingブロックは実際にはtry/finallyブロックのように機能します。何かのようなもの:

{
    System.IO.MemoryStream memoryStream = null;

    try
    {
        memoryStream = new System.IO.MemoryStream();
        //....your code
    }
    finally
    {
        if (memoryStream != null) //this check may be optmized away
            memoryStream.Dispose();
    }
}

C# を使用して

using ステートメントを使用すると、オブジェクトのメソッドを呼び出しているときに例外が発生した場合でも、Dispose が確実に呼び出されます。オブジェクトを try ブロック内に配置してから、finally ブロック内で Dispose を呼び出すことによって、同じ結果を得ることができます。実際、これは using ステートメントがコンパイラによってどのように変換されるかです。

現在のコードではIDisposable、クラスControlToByteに実装しています。これは、リソースを に配置したい場合に便利ですControlToByteIDisposable示されているように、クラスに実装する必要はありません。

于 2013-04-17T09:02:45.957 に答える