从资源清理的角度来看,为什么有Response.Close()
和Response.Dispose()
以及哪一个更全面(请拨打另一个)?
答案 0 :(得分:7)
如果提供了两种方法,Dispose
的实施应该调用Close
。使用using语句是一个好主意,以确保调用Dispose
并因此调用Close
,即使存在异常。
换句话说,这样做:
using (Response response = ...)
{
// ...
}
不是这个:
Response response = ...;
// ...
response.Close(); // If there is an exception this might never get called!
关闭和处理对象之间的一个区别是,当你处置一个对象时,通常不可能再使用该对象(尝试这样做可能会导致抛出ObjectDisposedException),但是在调用Close之后它可能是可能仍然使用该对象。
请注意,如果您正在讨论ASP.NET,那么通常不应该在Response对象上调用Close或Dispose。
答案 1 :(得分:1)
来自Implementing Finalize and Dispose to Clean Up Unmanaged Resources
上开发类库的设计指南偶尔会有一个特定于域的名称 比Dispose更合适。对于 例如,文件封装可能 想要使用方法名称关闭。在 这种情况下,私下实现Dispose 并创建一个公共Close方法 调用Dispose。以下代码 示例说明了这种模式。您 可以使用方法名称替换Close 适合您的域名。这个 示例需要System命名空间。
/ Do not make this method virtual.
// A derived class should not be allowed
// to override this method.
public void Close()
{
// Call the Dispose method with no parameters.
Dispose();
}
通常,只要资源可以打开或重新打开,我就会看到关闭,因为它为方法名称提供了很好的对称性。
答案 2 :(得分:0)
Response.Close()
关闭与客户端的套接字连接。
Response.Dispose()
是实现IDisposable接口并释放已分配资源的方法。
我认为Response.Close()
是从Response.Dispose()
方法调用的。
有关详细信息,请使用Reflector