首页 > 解决方案 > 使用返回的实例?

问题描述

我有一个执行 API 请求的类层次结构。在基类中,我构建了请求对象,在一些子类中,这个方法被覆盖了。

基类:

      protected virtual HttpRequestMessage BuildRequest(HttpMethod method, Uri uri, HttpContent content = null)
      {
           HttpRequestMessage request = new HttpRequestMessage(method, uri);
           if (null != content)
           {
                request.Content = content;
           }

           return request;
      }

子类:

      protected async override HttpRequestMessage BuildRequest(HttpMethod method, Uri uri, HttpContent content = null)
      {
           HttpRequestMessage request = await base.BuildRequest(method, uri, content);
           request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", AccessTokenHelper.GetAccessToken());

           return request;
      }

然后使用 BuildRequest() 方法的其他方法中的语句:

      using HttpRequestMessage request = BuildRequest(HttpMethod.Post, url, content);

如您所见,我是using返回的实例。这是否也会正确处理HttpRequestMessage每个方法中的实例BuildRequest()?或者这是在数万次请求后的经典内存泄漏情况?

标签: c#using

解决方案


如果您查看代码,则会创建一个实例:

HttpRequestMessage request = new HttpRequestMessage(method, uri);

其他 2 行仅获取对上面创建的实例的引用:

HttpRequestMessage request = await base.BuildRequest(method, uri, content);
using HttpRequestMessage request = BuildRequest(HttpMethod.Post, url, content);

因此,通过使用using HttpRequestMessage request = BuildRequest(HttpMethod.Post, url, content);,您可以正确处理在基本BuildRequest方法中创建的实例。


推荐阅读