在函数中使用变量
本文关键字:变量 函数 | 更新日期: 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
,它就可以被正确地处理掉。