我有以下代码:
WebRequest request = WebRequest.Create("ftp://myServer/myDirectory");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential("userName", "password");
request.GetResponse();
我是否必须处理WebResponse
返回的WebRequest
对象?
答案 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() {}
块。