1、将类的构造方式改为私有private。
2、声明静态类变量。
3、写静态类实例方法获得类对象。
private static FormToolbox toolbox;
private FormToolbox()
{
InitializeComponent();
}
public static FormToolbox GetInstance()
{
if(toolbox ==null||toolbox.IsDisposed)
{
toolbox = new FormToolbox();
toolbox.MdiParent = Form1.ActiveForm;
}
return toolbox;
}
4、在调用时通过类名.GetInstance().show()方法。
饿汉式单例、懒汉式单例:
饿汉式单例,通过静态初始化,类加载就实例化对象。
public sealed class Singleton //此修饰符会阻止其他类从该类继承
{
private static readonly Singleton instance = new Singleton();
private Singleton(){}
public static Singleton GetInstance()
{
return instance;
}
}
懒汉式单例,通过双重锁定解决多线程访问的安全性问题。
private static Singleton instance;
private static readonly object syncRoot = new object();
private Singleton() { }
public static Singleton GetInatance()
{
if(instance==null)
{
lock (syncRoot)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
实际应用:
public static Form UC_ToolsForm;
public static Form getForm(string strForm, UserControl userUC)
{
if (UC_ToolsForm == null || UC_ToolsForm.IsDisposed)
{
UC_ToolsForm = new Form();
UC_ToolsForm.Controls.Add(userUC);
}
return UC_ToolsForm;
}
private void buttonItem_Click(object sender, EventArgs e)
{
A instance = A.GetInatance();
getForm("具体窗口", instance );
UC_ToolsForm.Show();
}