如何从某个类中获取所有实例或者杀死某个类的所有实例?
例如,我有一个班级MyClass
,我将其作为m1
,m2
和m3
三次实例化。
有没有办法获取或杀死所有这些实例?
更多澄清:当我有一个“设置表单”类时。当用户单击“设置”按钮时,应用程序将从此类创建实例。当他再次点击同一个按钮时,它会生成新的实例。我希望它只显示第一个实例而不显示新实例
答案 0 :(得分:4)
不是我知道,但你可以在某种集合上构造对象时保存实例,以便以后可以访问所有实例:
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
}
}
答案 1 :(得分:1)
对于表单示例,您可以将表单作为变量保存在主程序中。这样,您只有一个设置表单实例。
private SettingsForm settingsForm = null;
SettingsButton_Click()
{
if(settingsForm == null)
{
settingsForm = new SettingsForm();
}
settingsForm.Show();
}
答案 2 :(得分:0)
实例化它们时,将它们放入更高范围的通用列表中:
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在下面的评论中所讨论的那样,这是不可能的。道歉。