如何获得某个类的所有实例或者杀死某个类的所有实例?如何获取或杀死某些类的所有实例?
例如,我有一个类MyClass
,它们三次作为m1
,m2
和m3
。
有没有办法获得或杀死所有这些实例?
更多解释:当我有一个“设置表单”类。当用户点击设置按钮时,应用程序会从这个类中创建实例。当他再次点击相同的按钮时,它会创建新的实例。我希望它只是不显示1实例制作新的实例
如何获得某个类的所有实例或者杀死某个类的所有实例?如何获取或杀死某些类的所有实例?
例如,我有一个类MyClass
,它们三次作为m1
,m2
和m3
。
有没有办法获得或杀死所有这些实例?
更多解释:当我有一个“设置表单”类。当用户点击设置按钮时,应用程序会从这个类中创建实例。当他再次点击相同的按钮时,它会创建新的实例。我希望它只是不显示1实例制作新的实例
这并不是说我知道,但你可以在某种集合构造对象的时候,所以你以后可以访问所有实例保存实例:
public class MyClass {
public static List<MyClass> instances = new List<MyClass>();
public MyClass() {
instances.Add(this);
}
}
编辑:
保存设置类作为形式的领域,并单击按钮时,检查该字段为空;如果是这样,实例
public class Form1 : Form {
private SettingsClass settings;
...
...
private void btnSettings_Click(object sender, EventArgs e) {
if (settings == null) {
settings = new SettingsClass();
} else {
// do nothing, already exists
}
// use settings object
}
}
好吧,但还是有另一个问题: 当用户从控制箱打开和关闭设置表单(处置)时,它不返回空值。并且在同一时间,应用程序不会再打开它,因为它不为空。 – EgyEast 2010-05-29 15:00:40
发布一些关于你如何关闭它的代码? (原来的问题) – 2010-05-29 15:04:02
谢谢你,修改你的代码后,问题已经解决了。 修改后的代码是 public void LoadFrmSettings() if(Sett!= null){if(Sett.Visible == true){Sett.Activate();返回; }} Sett = new FrmSett(); SETT。显示(); } – EgyEast 2010-05-29 15:15:01
当你实例化它们,把它们放在一个更高范围的泛型列表:
List<MyClass> myObjects = new List<NyClass>();
然后,当你做一个函数内的对象:
m1 = new MyClass();
m2 = new MyClass();
m3 = new MyClass();
myObjects.add(m1);
myObjects.add(m2);
myObjects.add(m3);
然后,在稍后阶段:
foreach(MyClass m in myObjects)
{
m.do_whatever_you_want();
m = null; // SEE EDIT BELOW
}
--------编辑----------- 正如John Saunders在下面的评论中所讨论的那样,这是不可能的。我很抱歉。
-1:设置为null是不必要的 – 2010-05-29 14:45:56
@John Sauders:我认为他问了如何“杀死”一个班级,因为班级以某种方式持续下去。设置为null将标记垃圾收集类。考虑到问题的背景,这是如何“不必要”的? (这意味着对象被持久化) – 2010-05-29 14:50:01
@Martin:在.NET中,设置为null不会处理任何资源。这是特别真实的,因为下一次迭代将为m指定一个新值。 – 2010-05-29 14:58:44
对于您的表单示例,您可以将表单作为变量保存在主程序中。这样你只有一个设置表单的实例。
private SettingsForm settingsForm = null;
SettingsButton_Click()
{
if(settingsForm == null)
{
settingsForm = new SettingsForm();
}
settingsForm.Show();
}
,但是当用户单击按钮时,它从控制箱中丢弃时,会显示错误“无法访问已放置的对象”。 – EgyEast 2010-05-29 15:03:48
你是什么意思,“杀”?总体而言,这个概念并不存在。这些情况是什么? – 2010-05-29 14:41:27
你想解决什么问题? – ChrisF 2010-05-29 14:43:01
好吧,我会澄清更多: 当我有一个“设置表”类。当用户点击设置按钮时,应用程序会从这个类中创建实例。当他再次点击相同的按钮时,它会创建新的实例。我希望它仅显示第一个实例,而不是创建新实例。 – EgyEast 2010-05-29 14:49:13