如何在C#中实现单例?

And*_*dre 25 .net c# singleton

如何在C#中实现单例模式?我想把我的常量和一些基本功能放在其中,因为我在我的项目中使用它们.我想让它们'全局',而不需要手动绑定它们我创建的每个对象.

tva*_*son 28

如果您只是存储一些全局值并且有一些不需要状态的方法,则不需要单例.只需使类及其属性/方法保持静态.

public static class GlobalSomething
{
   public static int NumberOfSomething { get; set; }

   public static string MangleString( string someValue )
   {
   }
}
Run Code Online (Sandbox Code Playgroud)

当你有一个普通的有状态的类时,单例是最有用的,但你只需要其中一个.其他人提供的链接应该有助于探索Singleton模式.


yfe*_*lum 6

Singleton != Global.您似乎在寻找关键字static.


小智 5

仅当以下两个条件都成立时,单例才有意义:

  1. 该对象必须是全局的
  2. 只能存在该对象的单个实例

请注意,#2,并不意味着你会喜欢的对象只有一个实例-如果多数民众赞成的情况下,简单地初始化它只有一次-这意味着必须(如中,这是危险的,这是不正确的)只能是单个实例。

如果要全局,只需创建某个(非符号)对象的全局实例(或使其成为静态对象或其他对象)。如果只需要一个实例,那么static是您的朋友。同样,只需实例化一个对象即可。

多数民众赞成在我的意见。


Fly*_*wat 5

您可以真正简化单例实现,这就是我使用的:

    internal FooService() { }        
    static FooService() { }

    private static readonly FooService _instance = new FooService();

    public static FooService Instance
    {
        get { return _instance; }
    }
Run Code Online (Sandbox Code Playgroud)

  • 私有静态只读标记了 BeforeFieldInit,它将在程序集加载时实例化一次,并且永远不会再实例化。 (3认同)