【发布时间】:2009-02-17 04:24:47
【问题描述】:
我最近注意到 Visual Studio Designer (C#) 的一些行为,我不理解,想知道是否有人可以澄清...
我的一些Windows Forms,设计器生成的第一行代码如下;
this.components = new System.ComponentModel.Container();
在这种情况下,dispose 方法在同一个设计器文件中,dispose 方法将两个“Dispose”调用置于 case“if”条件中,如下所示;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
base.Dispose(disposing);
}
}
即除非 disposing 为 true,并且组件不为 null,否则不会调用任何内容。
在其他一些表单中,缺少设计器生成的代码中的第一行。在这些情况下,base.Dispose 调用在“if”条件之外......
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
我在跟踪表单未关闭的错误时注意到了这一点,其中 this.components 为空,但 base.Dispose 调用在该条件内(我怀疑设计器代码已被篡改,但这是另一回事。
是什么控制了这种行为?
(项目中的一些早期表单是在 VS 2005 中创建的,我们现在使用 VS 2008 - 线索?)
【问题讨论】:
标签: c# visual-studio winforms visual-studio-2008 visual-studio-2005