环境说明: 本方法不针对多线程。
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();
}