所有的“using”块都确保在块的末尾调用对象的“dispose”方法。对象在被释放后仍然可以被访问,但要知道如果这样做是否会发生任何不好的事情,则取决于“Dispose”方法的实现。
在这种情况下,它看起来不像TableRow上的“Dispose”方法&TableCell执行任何阻止将来使用它们的操作。这就是为什么你没有任何问题。
因为您希望在将来使用这些对象,所以根本不应该将它们放在“使用”块中。父页对象应在页生命周期结束时释放控件。
编辑:
我做了一个测试服务器控件,并在它的“Dispose”事件中放置了一个断点。下面是显示.NET调用Dispose的堆栈跟踪。您可以使用Reflector更详细地查看代码。
at TestControl.Dispose() in D:\TestControl.cs:line 25
at System.Web.UI.Control.UnloadRecursive(Boolean dispose)
at System.Web.UI.Control.UnloadRecursive(Boolean dispose)
at System.Web.UI.Control.UnloadRecursive(Boolean dispose)
at System.Web.UI.Control.UnloadRecursive(Boolean dispose)
at System.Web.UI.Page.UnloadRecursive(Boolean dispose)
at System.Web.UI.Page.ProcessRequestCleanup()
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)