为什么.aspx继承了IDispose,但.ashx没有?

时间:2011-12-18 09:07:29

标签: asp.net

它们都继承了接口IHttpHandler,因此asp.net将以相同的方式调用它们。但是为什么aspx页面继承了IDispose? Asp.net是如何实现它的?

2 个答案:

答案 0 :(得分:2)

ASP.NET 页面继承自基础System.Web.UI.Page类,后者又实现了继承自System.Web.UI.TemplateControl 的抽象System.Web.UI.ControlIDisposable

在代码中,有一个Control类Dispose()的注释:

// Summary:
//     Enables a server control to perform final clean up before it is released
//     from memory.

这就是.aspx文件实际上实现IDisposable接口的原因。

现在,ASP.NET 处理程序直接实现System.Web.IHttpHandler接口而不继承任何其他类 - 作为独立接口,它不实现IDisposable - 它取决于程序员决定是否添加这样的东西。

答案 1 :(得分:0)

所以你的问题是,如何调用aspx(Dispose())的Page代码?

您假设ASP.NET框架只看到IHttpHandler,无论它是否包含Page或其他实现。这几乎肯定不是真的; 某些需要调用页面的构造函数。

您可以使用IL Spy之类的工具来尝试查找不同处理的位置以及它的外观。