为什么我需要在ASP.NET控件上调用处理?
|
我在VS中进行一些ASP.NET开发,刚刚发现一个有趣的小代码建议(我认为他们来自coderush,但我可能是错的). 每当我创建控件,它告诉我,我应该为他们使用一个“使用”语句.对于这里发生的事情我有点困惑.使用我的代码看起来像: using (HtmlTableRow tableRow = new HtmlTableRow())
{
tableRow.Attributes.Add("class",isOddRow ? "OddRow" : "EvenRow");
listingTable.Rows.Add(tableRow);
addCell(tableRow,row,"issueId");
addCell(tableRow,"Title");
addCell(tableRow,"Type");
addCell(tableRow,"Summary");
}
所以我期待在使用语句的结尾,它将在tableRow上调用处理.但是,MSDN库中的文档说:
所以我希望我现在有一个不可用的对象在我的控制结构中,所以它会破坏或不渲染或某事.但是,一切似乎都很好. 所以我想知道的是为什么所有的控制一次性?是仅仅因为其中一些将会使其全部一次性意味着一个在顶层处理的调用可以被递归传递给所有的子控件? 我想我会理解,如果不是因为这个文件明确地说,处理一个控制使它无法使用…文档是错误的? 解决方法你不应该这样做.您需要做的是确保listTable位于“控件”集合中,以便在页面处理时将其进行处理.然后,列表表对象负责正确处理其所有子项.为什么所有的Control对象都实现了IDisposable接口.这样每个父控件都可以调用Dispose对所有的孩子,而无需首先对每个孩子进行测试/转换.每个控件单独负责确定在调用Dispose方法时是否确实有任何需要清除的内容. 文件没有错.在处理过程中实现IDisposable并具有实际清理的状态数据的任何正确写入的对象都应抛出ObjectDisposedException,如果在处理完任何其公共/受保护/内部属性或方法后被访问. (假设Dispose已被调用后的无效状态)有些类型将忽略此规则,如果实际上没有任何要清理的内容,并且不必担心无效状态. 你得到一个建议将其包装在一个使用块的原因是因为分析器没有意识到,listTable将处理其Rows集合,它将处理已添加到其中的每个行对象.另外,如果HtmlTableRow tableRow = new HtmlTableRow()和listingTable.Rows.Add(tableRow)之间抛出异常,则HtmlTableRow对象将被“孤立”,而不在任何其他对象的IDisposable层次结构中.代码分析希望您使用try / finally块立即处理HtmlTableRow(如果发生这种情况). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – DI模式是否限制了昂贵的对象创建以及不经
- ASP.NET MVC 3中的当前年份
- asp.net-mvc – redirectToAction()和View()之间的区别
- asp.net-mvc – ASP.Net MVC4根cshtml和“不继承’System.W
- .net – 多选列表框中的预选项目(MVC3 Razor)
- asp.net-core – 在运行时更改注入的对象
- asp.net-mvc – 大型Web应用程序中的Windows Workflow用法
- asp.net-mvc – 获取在Identity 2中具有指定角色的用户列表
- asp.net-mvc-3 – ASP.NET MVC 3 _Layout.cshtml控制器
- asp.net-mvc – 您可以使用IOC容器将依赖项注入自定义WebVi
- asp.net-mvc – 我如何使用一个新的Phil的路由网
- asp.net-mvc-4 – 具有动态部分视图创建的MVC Aj
- iis-7.5 – .NET MVC 3动作是否应该触发w3wp.exe
- asp.net-mvc – Microsoft.Owin.Security.IAuthe
- asp.net-mvc – 使用邮政MVC与布局解析标题作为邮
- asp.net-mvc – 真实世界的ASP.NET MVC存储库
- asp.net-core – 具有取消令牌的自定义AspCore中
- asp.net-mvc – ASP.NET MVC:很多路由 – 总是只
- asp.net-mvc – ASP.NET MVC中的动态网站地图
- ASP.NET成员资格创建用户,而不需要QuestionAndAn
