gpt4 book ai didi

c# - 更好的 Dispose 方法(通过 ComponentModel.IContainer ??)

转载 作者:行者123 更新时间:2023-11-30 19:32:54 25 4
gpt4 key购买 nike

我有这个要更改的 Dispose 方法。 (是的,我知道我应该检查每个对象是否为 null)

    protected override void Dispose(bool disposing)
{
if( disposing )
{
if( monthLineBrush != null)
monthLineBrush.Dispose();
monthHeaderLineBrush.Dispose();
shadowBrush.Dispose();
monthHeaderLineBrushDark.Dispose();
monthFontBrush.Dispose();
weekendBgBrush.Dispose();
whiteBrush.Dispose();
dayFontBrush.Dispose();
chartBrush.Dispose();
chartWarningBrush.Dispose();
barBrush.Dispose();
monthLinePen.Dispose();
monthHeaderLinePen.Dispose();
monthHeaderLinePenDark.Dispose();
warningLinePen.Dispose();
monthFont.Dispose();
yearFont.Dispose();
weekLinePen.Dispose();
dayLinePen.Dispose();
tooltip.Dispose();
toolTipLabel.Dispose();
}

base.Dispose(disposing);
}

VS 使用一个名为 components 的 System.ComponentModel.IContainer 对象,并且只处理这个 components 对象。但是我找不到将不同对象添加到组件 objedct 的任何代码 ??

    protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

这是如何工作的?

最佳答案

将创建的每个对象添加到 components 容器的代码会自动生成并添加到与每个表单关联的 *.Designer.cs 文件中由设计师设计。

例如,在向表单添加 ToolTip 控件后,Form1.Designer.cs 文件在全新的空项目中可能看起来像这样:

private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.SuspendLayout();
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 264);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}

整个困惑中有两行相关的代码,这两行出现在最顶部:

this.components = new System.ComponentModel.Container();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);

第一行创建一个 System.ComponentModel.Container名为 components 的对象,所有实现 IDisposable 的组件都将在创建时添加到其中。

第二行创建了一个ToolTip 对象(以响应在设计时表单表面的药物),并使用constructor overload。接受类型为 IContainer 的参数。

将同样的歌曲和舞蹈扩展到添加到您的表单的其他组件,可以让它们全部用 Dispose method 一次性处理掉。由 components 容器提供。

关于c# - 更好的 Dispose 方法(通过 ComponentModel.IContainer ??),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4603859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com