我是否必须处理我不使用的退回物品?

时间:2011-05-03 16:22:51

标签: c# .net dispose

我有以下代码:

WebRequest request = WebRequest.Create("ftp://myServer/myDirectory");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential("userName", "password");

request.GetResponse();

我是否必须处理WebResponse返回的WebRequest对象?

3 个答案:

答案 0 :(得分:10)

你应该。将其包装在using语句中,当超出范围时它将自动处理

using (var response = request.GetResponse())
{

}

答案 1 :(得分:4)

至于必须处置,我会说不。当CLR检测到没有对该对象的引用时,将调度该对象以进行垃圾回收。您可能遇到的问题是无法保证以正确的顺序清理对象及其属性。简单的对象/类,无论是.NET Framework的一部分还是自定义对象/类,都很少实现iDisposable接口。如果一个对象/类实现了iDisposable,你肯定应该调用dispose方法来确保正确处理清理工作,因为设计师有一些迹象表明有必要以特定的方式进行清理。正如Stecya所说,包装在一个使用块中是一种很好的方式,可以自动完成。你也可以使用try / finally块来实现相同的功能(在finally块中处理对象)。

答案 2 :(得分:3)

是的,你应该。而且你说得对,这是不对的,通常你应该只处理你创建的对象(使用new)并将你从另一个组件中获取/借用的对象留下来。

密钥在WebRequest.Create()的名称和描述中,它是一种工厂方法,代表您创建一些东西,而调用者(您)负责返回值。

当然首选语法是using() {}块。