C# 什么';Response.Close()和Response.Dispose()的区别是什么?
从资源清理的角度来看,为什么会有C# 什么';Response.Close()和Response.Dispose()的区别是什么?,c#,response,dispose,C#,Response,Dispose,从资源清理的角度来看,为什么会有Response.Close()和Response.Dispose()以及哪一个更全面(调用另一个)?如果提供了这两种方法,Dispose的实现应该调用Close。最好使用using语句确保调用Dispose,从而调用Close,即使存在异常 换言之,请这样做: using (Response response = ...) { // ... } 不是这个: Response response = ...; // ... response.Close()
Response.Close()
和Response.Dispose()
以及哪一个更全面(调用另一个)?如果提供了这两种方法,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,则通常不应在响应对象上调用Close或Dispose Response.Close()
关闭与客户端的套接字连接。
Response.Dispose()
是实现IDisposable接口并释放已分配资源的方法
我认为Response.Close()
是从Response.Dispose()
方法调用的
有关更多详细信息,请使用上的《开发类库的设计指南》 有时会使用特定于域的名称 比处置更合适。对于 例如,可能需要进行文件封装 要使用方法名Close。在里面 这种情况,实行私下处理 并创建一个公共关闭方法 电话处理。下面的代码 示例说明了这种模式。你 可以用方法名替换Close 适合您的域。这 示例需要系统名称空间
通常,每当可以打开或重新打开资源时,我都会看到close,因为它为方法名提供了很好的对称性。另一个区别是
close
应该在Dispose
不应该抛出异常的情况下抛出异常。例如,正确使用事务操作可能需要显式提交或回滚每个操作。不这样做而调用Close
会引发异常,但调用Dispose
会触发静默回滚(因为Dispose
很可能被调用,因为事务被异常中断,而引发另一个异常会令人讨厌地破坏第一个异常)。
/ 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();
}