環境說明: 本方法不針對多線程。
1.在窗體應用程序中,很多的窗體只能也只需要出現一次,這就需要使用到單例模式。
2.當需要設置爲單例模式的窗體少量較少時,我們可以進行對窗體進行使用單例,但是過多時如何去實現單例。
理解說明:對象的創建需要三步驟,我們能操作的只有在對象創建的第三部,也就是調用構造函數,那麼實現單例只能通過操作構造函數來實現單例。
舉例:
1.窗體的單例模式操作:
1.1將窗體的構造函數私有化。
1.2創建靜態字段用於存儲窗體。
1.3創建靜態函數用於獲取窗體。
1.4必須對窗體的Closeing的事件進行處理,否則會報異常"無法操作已經釋放的資源"
1.5使用該窗體直接使用類+函數就可以不斷調用唯一的窗體。
private OnlyForm()
{
InitializeComponent();
}
private static OnlyForm _onlyForm;
public static OnlyForm GetOnlyForm()
{
if (_onlyForm == null)
{
_onlyForm = new OnlyForm();
}
return _onlyForm;
}
private void OnlyForm_FormClosing(object sender, FormClosingEventArgs e)
{
_onlyForm = new OnlyForm();
}
2.對過多窗體實現單例模式
2.1創建一個單例類,單例類創建方式和使用單例模式一樣。
2.2創建窗體的屬性,由於類使用了單例模式只能創建一個對象,那麼屬性也就是唯一的。
2.3多個窗體的在單例類中創建多個屬性即可。
//單例類
private SetOnly()
{
}
private static SetOnly _setOnly;
public static SetOnly GetOnly()
{
if (_setOnly == null)
_setOnly = new SetOnly();
return _setOnly;
}
public Form2 GetForm2 { get; set; }
//其他窗體展示單例窗體代碼
private void button2_Click(object sender, EventArgs e)
{
if (setOnly.GetForm2 == null)
setOnly.GetForm2 = new Form2();
setOnly.GetForm2.Show();
}