在函数中使用变量

时间:2014-06-19 08:31:18

标签: c# variables using

我使用了一个dll而我没有它的源代码。有人建议我像这样使用这个dll的功能:

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

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

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

为什么using位于函数IDSCallback.Received()中,而不是调用IDSCallback.Received()的函数?

2 个答案:

答案 0 :(得分:1)

它类似于javas auto resource closing try-catch。看看documentation

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

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

以及您创建它的位置:

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

答案 1 :(得分:1)

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

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

建议可能是调用IDSCallback.Received方法使用using语句的代码,因此一旦不再需要NetworkStream,就可以将其正确处理掉。