我在VS做一些ASP.NET开发,刚刚发现了一个有趣的小代码建议(我认为他们来自coderush,但我可能是错的)。为什么我需要调用ASP.NET控件上的dispose?
每当我创建控件时,它告诉我应该为他们使用“使用”语句。尽管我对这里发生了什么感到困惑。与使用我的代码看起来是这样的:
using (HtmlTableRow tableRow = new HtmlTableRow())
{
tableRow.Attributes.Add("class", isOddRow ? "OddRow" : "EvenRow");
listingTable.Rows.Add(tableRow);
addCell(tableRow, row, "issueId");
addCell(tableRow, row, "Title");
addCell(tableRow, row, "Type");
addCell(tableRow, row, "Summary");
}
所以我期待,在using语句的结束,它会调用在tablerow的处理。但是,MSDN库中的文档说:
Dispose方法使控制 处于不可用状态。在调用 这种方法后,您必须释放对控件的所有 引用,以便它占用的内存可以是 垃圾回收回收。
所以我希望我现在有一个不可用的对象在我的控制结构中,所以它会打破或不呈现或什么。然而,一切似乎都很好。
所以我想知道为什么所有的控件都是一次性的?这是否仅仅是因为它们中的一部分会使它们成为一次性意味着一个调用在顶层处理的调用可以递归地传递给所有子控件?
我想我会理解,如果不是因为文档明确指出处置控件使其无法使用......文档是否错误?
如果我们不使用“使用”块,我们如何处理孤立的对象(@Toby提到)? – Lijo 2012-11-21 17:38:27