故事背景
在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是相同的