在函数中使用变量

本文关键字:变量 函数 | 更新日期: 2023-09-27 18:09:31

我使用dll,我没有它的源代码。有人建议我使用这个dll的函数,像这样:

void IDSCallback.Received(NetworkStream a)
{
    using (a)
    {
        // Some code...
    }
}

我不明白using的目的。在此函数结束时,a.Dispose()被调用,因此a不再可用。

因此调用IDSCallback.Received()的函数不能再使用它了。

为什么using在函数IDSCallback.Received()中而不在函数IDSCallback.Received()中?

在函数中使用变量

这类似于java的自动资源关闭try-catch。看一下文档

在您的上下文中,您不应该处置参数。您应该在创建它的地方执行:

void IDSCallback.Received(NetworkStream a)
{
    //..
}

和创建位置:

using (NetworkStream  a = /* Create the stream */)
{
    IDSCallback.Received(a);
    // Do whatever else you want with it
}

using是一个try/finally块,以确保在资源上调用Dispose()方法。请参阅MSDN文档了解编译器如何解释它。

是否需要在IDSCallback.Received方法中使用using语句的问题取决于该方法与调用代码之间的契约,除非有令人信服的理由,否则它不应该处置它没有构造的资源。因此,也不应该有using语句。

这个建议可能是为了调用IDSCallback.Received方法的代码使用using语句,这样一旦不再需要NetworkStream,它就可以被正确地处理掉。