2011-05-03 79 views
4

我有以下代码:我是否必须处理我不使用的返回对象?

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

request.GetResponse(); 

我必须配置一个由WebRequest返回WebResponse对象?

回答

10

你应该。敷在using声明,它会自动配置外出时的范围

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

} 
+0

即使你不这样做,它也会最终处置,但你真的应该这样做。 – cadrell0 2011-05-03 16:27:56

4

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

+0

你似乎在这里有点矛盾。大多数Idisposables __必须明确处理,否则可能会出错。不能依靠GC。这有多重要取决于资源和App类型。 – 2011-05-06 10:26:05

3

是的,你应该。你说得对,这不是完全明显,通常你应该只处置你创建的对象(与new),离开那些你从单纯另一组件/借款。

关键在于WebRequest.Create()的名称和描述,它是一种工厂方法,以您的名义创建一些东西,并且调用者(您)负责返回值。

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

相关问题