【发布时间】:2019-10-08 06:45:41
【问题描述】:
我有一个Form(嗯,我的窗口,它继承自Form),我想在其中创建一些控件,然后在这个类的整个代码中引用它们。
所以我创建了字段:
private Label _someCounter;
private Label _someAnotherCounter;
我初始化它们,随心所欲地使用它们,这很棒。
但我还需要记住处置它们,问题是:我该怎么做?我可以想到三种方式:
我在
Disposeoverride 方法中编写了更多代码,由设计师生成(因为设计师可能会在一段时间内覆盖它,我不喜欢这个想法)。-
我在一个类中找到了
李>copmonents字段,该字段是通过生成的Dispose覆盖进行处理的,所以我只是将这些控件添加到copmonents集合中,因此它们会自动处理。 毕竟,我也是这么想的,毕竟我将它们添加到我的界面中,所以无论如何它们都会添加到
component。所以我什么都不用做。
【问题讨论】:
-
看看这篇文章:docs.microsoft.com/en-us/dotnet/standard/garbage-collection/…。它解释了如何实现
IDisposable,还提到了在继承已经实现IDisposable的基类时如何处理。 -
我认为你不需要做任何事情。如果您将控件添加到某个容器的控件集合中(您应该这样做以查看它们),那么该容器将在释放时释放其所有子级。您可以在 Control.Dispose method 的参考源中看到该逻辑
-
请注意,只有
#region Windows Form Designer generated code区域中的代码在构建时被重新生成——而不是整个Form.designer.cs文件,所以修改它的其余部分是安全的(包括@987654334 @)。但我认为史蒂夫的评论是正确的。 -
@HenrikHansen 您不应修改 Designer.cs 文件。除非您仔细了解自己在做什么,例如重命名或更改类型(例如,您可能希望将标签更改为复选框),或者如果您想通过代码快速编辑控件属性,或者如果您的重构或修复编译错误其他地方破坏了这个文件。
-
@OlivierRogier:你真的不是在读,我在写什么。修改
Dispose(bool disposing)是非常安全的,如果您的表单中有想要手动处理的对象,您应该使用它:-)
标签: c# winforms controls dispose