[英]Do I have to dispose of returned objects that I don't use?
我有以下代码:
WebRequest request = WebRequest.Create("ftp://myServer/myDirectory");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential("userName", "password");
request.GetResponse();
我是否必须处理WebRequest
返回的WebResponse
object ?
你应该。 using
语句包裹,出scope时自动处理
using (var response = request.GetResponse())
{
}
至于必须处置,我会说不。 当 CLR 检测到没有对 object 的引用时,将安排 object 进行垃圾收集。 您可能遇到的问题是不能保证 object 及其属性会以正确的顺序被清除。 简单的对象/类,无论是 .NET 框架的一部分还是自定义对象/类都很少实现 iDisposable 接口。 如果一个对象/类实现了 iDisposable,您绝对应该调用 dispose 方法以确保正确处理清理工作,因为设计人员有一些迹象表明有必要以特定方式进行清理。 正如 Stecya 所说,包装在 using 块中是一种很好的方式,可以看到这是自动完成的。 您也可以使用 try/finally 块来实现相同的目的(在 finally 块中处理 object)。
是的你应该。 你是对的,这并不完全明显,通常你应该只 Dispose 你创建的对象(使用new
),而不是那些你从另一个组件中获取/借来的对象。
关键在WebRequest.Create()
的名称和描述中,它是一个工厂方法,代表您创建某些内容,调用者(您)负责返回值。
当然,首选语法是using() {}
块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.