当前位置:  开发笔记 > 编程语言 > 正文

如何在C#中销毁静态类

如何解决《如何在C#中销毁静态类》经验,为你挑选了3个好方法。

我正在使用.net 1.1.我有一个会话类,我在其中存储了许多静态变量,这些变量包含许多类要使用的数据.

我想找到一种简单的方法来销毁这个类,而不是逐个重置每个变量.例如,如果有一个静态类MyStatic,我本来希望通过写MyStatic = null来破坏/删除这个类,这是目前不可能的,

补充问题.

单身人士的想法很好,但我有以下问题:

如果实现单例,"单个"对象仍将保留在内存中.在单例中,我们只检查实例是否已存在.我怎样才能确保此实例变量也被破坏.

我有一个主类,它初始化静态类中的变量.即使我计划实现Rest()方法,我也需要从一个方法中调用它,例如,主类中的析构函数.但是只有当GC在内存中收集这个主类对象时才会调用此析构函数,这意味着Reset()被调用得很晚

谢谢普拉迪普



1> Kyle Trauber..:

不要使用静态类来存储变量.使用一个实例(如果你在任何给定的时间只想要一个实例,那就使它成为一个单例.)然后你可以实现IDisposible,并在想要销毁它时调用Dispose().

有关更多信息,请访问此站点:http://csharpindepth.com/Articles/General/Singleton.aspx

编辑

该对象仍然需要进行垃圾回收,因此除非您使用大量非托管资源,否则您应该没问题.您可以实现IDisposible来清理任何需要清理的资源.



2> ChrisW..:

而不是静态类,具有类的静态实例:

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;
}



3> Brian Rasmus..:

除非它驻留在单独的AppDomain中,否则无法销毁静态,在这种情况下,您可以通过卸载AppDomain来消除静态.然而,通常最好避免使用静力学.

编辑:其他问题

当不再引用单例时,它将像其他所有一样被收集.换句话说,如果你想收集它,你必须确保没有对它的引用.不言而喻,如果您将静态引用存储到您的单例中,您将遇到与以前相同的问题.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有