HttpWebReponse implements IDisposable interface, but why is there no Dispose method. It only contains Close method. Will be using pattern still available for this class?
Asked
Active
Viewed 6,455 times
15
Jehof
- 34,674
- 10
- 123
- 155
user705414
- 20,472
- 39
- 112
- 155
-
The [HttpWebResponse](http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.aspx) should be a Dispose method, as specified here: [WebResponse.Dispose Method @ msdn](http://msdn.microsoft.com/en-us/library/ff928381.aspx) – Ron Sijm Nov 09 '11 at 10:22
-
BTW - Perhaps this changed at some point. now `HttpWebResponse response = ...;'` `response.Dispose();` compiles. – ToolmakerSteve Jan 16 '17 at 17:00
1 Answers
25
HttpWebResponse implements IDisposable interface explicitly. So you can call Dispose only when you cast HttpWebResponse to IDisposable. The Close method of HttpWebResponse calls Dispose internally.
HttpWebResponse response = // assigned from somewhere
IDisposable disposableResponse = response as IDisposable;
disposableResponse.Dispose();
Since HttpWebResponse implements IDisposable you can use it with an using-statement.
HttpWebResponse response = // assigned from somewhere
using(response) {
// do your work;
}
Jehof
- 34,674
- 10
- 123
- 155
-
@user705414: see this questio on stackoverflow http://stackoverflow.com/questions/143405/c-interfaces-implicit-and-explicit-implementation – Jehof Nov 09 '11 at 11:20
-
-
4@jgauffin, because (someone at) Microsoft thinks it will make your code more readable to write `response.Close();` instead of `response.Dispose();`. The same reason that all IO/stream classes must be `Close`d. – GvS Nov 09 '11 at 14:09
-
It seems that the opposite is true. `Dispose()` calls `Close()` internally. Source: https://referencesource.microsoft.com/#System/net/System/Net/WebResponse.cs,fb515b1af6c9f830 – Delphi.Boy May 13 '20 at 16:39