代码之家  ›  专栏  ›  技术社区  ›  My Other Me

静态类能否在单个进程中实例化多次?

  •  0
  • My Other Me  · 技术社区  · 15 年前

    如果我只需要一个简单的构造,我可以使用静态类,还是必须使用单例?

    6 回复  |  直到 15 年前
        1
  •  2
  •   Graviton    15 年前

    是否可以将单个进程与多个

    不,多个线程都将指向同一个静态类。

    如果我只需要一个简单的构造 找单身汉?

    我不太明白你的问题。但一般来说,当需要全局数据访问时,您使用单例。使用具有静态成员的静态类也可以得到同样的结果。但是这使得代码更加难看,因为有太多的静态关键字,如果你想放弃全局访问策略而使用更面向对象的方法,那么你的生活就会变得困难。

    然而,与静态类相比,Singleton是一种更受欢迎的方法。

    static classes are not thread-safe

        2
  •  6
  •   bitbonk    15 年前

    是的,静态类可以充当类似于单例的构造。它包含的所有静态成员将只存在一次- 但是每个AppDomain (请记住,一个进程可以有多个(独立的.NET AppDomains)。

        3
  •  2
  •   Eddie Sullivan    15 年前

    每个静态成员变量的一个实例在运行时创建,它们将在所有线程之间共享。

        4
  •  1
  •   meklarian    15 年前

    线程导致一个静态类被删除

    AppDomain Class @ MSDN

    编辑:

    我应该补充一点,进程中的线程数和AppDomain数也是分开的。如果希望,单线程进程可以创建任意数量的AppDomain。此外,是否有额外的线程调用额外的AppDomain也取决于程序流。这可能会造成多个线程访问一个静态类的多个实例的情况,但除非您自己显式创建此场景,否则不会发生这种情况。

    如果我只需要一个简单的构造 找单身汉?

    似乎不清楚你想问什么。静态类成员按概念表示单例。如果你问这是否是创建简单构造的好方法,答案可能是。这取决于你的需要。大多数人会认为,您应该只使用常规类定义,只创建一个实例。

        5
  •  0
  •   Zenuka    15 年前

    无法创建静态类的实例。。。

        6
  •  0
  •   Mark Brackett    15 年前

    具有多个线程的单个进程是否可以多次创建静态类?

    Yes you can ,尽管这样做(甚至想这样做)有些不寻常。它需要一个单独的 AppDomain ,或使用 ThreadStaticAttribute

    如果我只需要一个简单的构造,我可以使用静态类,还是必须使用单例?

    你可以用任何一种。单例允许您使用非静态类(如静态类),并在管理生命周期方面提供了一些额外的灵活性。