如何獲得某個類的所有實例或者殺死某個類的所有實例?如何獲取或殺死某些類的所有實例?
例如,我有一個類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