我正在使用.net 1.1.我有一个会话类,我在其中存储了许多静态变量,这些变量包含许多类要使用的数据.
我想找到一种简单的方法来销毁这个类,而不是逐个重置每个变量.例如,如果有一个静态类MyStatic,我本来希望通过写MyStatic = null来破坏/删除这个类,这是目前不可能的,
单身人士的想法很好,但我有以下问题:
如果实现单例,"单个"对象仍将保留在内存中.在单例中,我们只检查实例是否已存在.我怎样才能确保此实例变量也被破坏.
我有一个主类,它初始化静态类中的变量.即使我计划实现Rest()方法,我也需要从一个方法中调用它,例如,主类中的析构函数.但是只有当GC在内存中收集这个主类对象时才会调用此析构函数,这意味着Reset()被调用得很晚
谢谢普拉迪普
Kyl*_*man 18
不要使用静态类来存储变量.使用一个实例(如果你在任何给定的时间只想要一个实例,那就使它成为一个单例.)然后你可以实现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;
}
Run Code Online (Sandbox Code Playgroud)
您还可以委托给该类的实例:
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;
}
Run Code Online (Sandbox Code Playgroud)
除非它驻留在单独的AppDomain中,否则无法销毁静态,在这种情况下,您可以通过卸载AppDomain来消除静态.然而,通常最好避免使用静力学.
编辑:其他问题
当不再引用单例时,它将像其他所有一样被收集.换句话说,如果你想收集它,你必须确保没有对它的引用.不言而喻,如果您将静态引用存储到您的单例中,您将遇到与以前相同的问题.
归档时间: |
|
查看次数: |
31979 次 |
最近记录: |