我正在使用.net 1.1.我有一个会话类,我在其中存储了许多静态变量,这些变量包含许多类要使用的数据.
我想找到一种简单的方法来销毁这个类,而不是逐个重置每个变量.例如,如果有一个静态类MyStatic,我本来希望通过写MyStatic = null来破坏/删除这个类,这是目前不可能的,
单身人士的想法很好,但我有以下问题:
如果实现单例,"单个"对象仍将保留在内存中.在单例中,我们只检查实例是否已存在.我怎样才能确保此实例变量也被破坏.
我有一个主类,它初始化静态类中的变量.即使我计划实现Rest()方法,我也需要从一个方法中调用它,例如,主类中的析构函数.但是只有当GC在内存中收集这个主类对象时才会调用此析构函数,这意味着Reset()被调用得很晚
谢谢普拉迪普
不要使用静态类来存储变量.使用一个实例(如果你在任何给定的时间只想要一个实例,那就使它成为一个单例.)然后你可以实现IDisposible,并在想要销毁它时调用Dispose().
有关更多信息,请访问此站点:http://csharpindepth.com/Articles/General/Singleton.aspx
编辑
该对象仍然需要进行垃圾回收,因此除非您使用大量非托管资源,否则您应该没问题.您可以实现IDisposible来清理任何需要清理的资源.
而不是静态类,具有类的静态实例:
class Foo { public int Something; public static Foo Instance = new Foo(); public void Reset() { Instance = new Foo(); } } void test { int i = Foo.Instance.Something; }
您还可以委托给该类的实例:
class Foo { public int Something { get { return instance.something; } } private int something; private static Foo instance = new Foo(); public void Reset() { instance = new Foo(); } } void test { int i = Foo.Something; }
除非它驻留在单独的AppDomain中,否则无法销毁静态,在这种情况下,您可以通过卸载AppDomain来消除静态.然而,通常最好避免使用静力学.
编辑:其他问题
当不再引用单例时,它将像其他所有一样被收集.换句话说,如果你想收集它,你必须确保没有对它的引用.不言而喻,如果您将静态引用存储到您的单例中,您将遇到与以前相同的问题.