C# 我是否必须处理我不需要的返回对象';我没用?

C# 我是否必须处理我不需要的返回对象';我没用?,c#,.net,dispose,C#,.net,Dispose,我有以下代码: WebRequest request = WebRequest.Create("ftp://myServer/myDirectory"); request.Method = WebRequestMethods.Ftp.MakeDirectory; request.Credentials = new NetworkCredential("userName", "password"); request.GetResponse(); 我是否必须处理由WebRequest返回的Web

我有以下代码:

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

request.GetResponse();

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

您应该这样做。使用语句将其包装在
中,它将在超出范围时自动处理

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

}

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

是的,您应该这样做。您是对的,这并不完全明显,通常您应该只处理您创建的对象(使用
new
),而不处理从其他组件获取/借用的对象

密钥位于
WebRequest.Create()
的名称和说明中,它是一种代表您创建内容的工厂方法,调用方(您)负责返回值


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

即使你不这样做,它最终也会处理掉,但你真的应该这样做。你在这里似乎有点自相矛盾。大多数IDisPobles都必须显式处理,否则可能会出错。GC不可依赖。这在多大程度上取决于资源和应用程序类型。