如何获取或杀死某些类的所有实例?

时间:2010-05-29 14:38:07

标签: c#

如何从某个类中获取所有实例或者杀死某个类的所有实例?

例如,我有一个班级MyClass,我将其作为m1m2m3三次实例化。

有没有办法获取或杀死所有这些实例?

更多澄清:当我有一个“设置表单”类时。当用户单击“设置”按钮时,应用程序将从此类创建实例。当他再次点击同一个按钮时,它会生成新的实例。我希望它只显示第一个实例而不显示新实例

3 个答案:

答案 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在下面的评论中所讨论的那样,这是不可能的。道歉。