故事背景
在form窗体中会有一些这种情况,这种情况就是我们没有限制被实例化的窗体原因,如果我们只是把窗体的条件修改成为 form==null,
form==null是把该窗体对象设置成为空的,但是该form还仍然存在在内存地址里。
form.IsDisposed==true是把该窗体是否为释放过的资源的属性设置为true,但form没有变化。如果你是想把form完全释放,建议使用form.Dispose()方法释放。
所以我们在限制条件时加上一个判断if (form == null || form.IsDisposed)就行了。
那么在类中的单例模式其实也加上了一个限制,使其在被实例化时只能通过自己实例化自己就行了。
单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
那么直接通过代码来体现就能更好理解了
class Singleton
{
private static Singleton instacne;
//重写类的构造方法使其只能自己使用,外界就无法利用new来创建此类的实例化了
private Singleton()
{
}
//本类唯一全局访问点
public static Singleton GetInstance()
{
//判断此类是否已被实例化
if (instacne ==null)
{
instacne = new Singleton();
}
return instacne;
}
}
客户端代码
static void Main(string[] args)
{
Singleton s1 = Singleton.GetInstance();
Singleton s2 = Singleton.GetInstance();
if (s1==s2)
{
Console.WriteLine("两个对象是相同的实例");
}
Console.Read();
}
对比下图和客户端代码,可以看到无法此类无法被实例化
这是运行以后的结果,可以看出s1与s2是相同的