2

在实现 IDisposable 的类中的 MemoryStream 对象上使用“使用”后,如何实现 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,如果您想在ControlToByte. 如图所示,您不需要IDisposable为您的类实现。

于 2013-04-17T09:02:45.957 回答