Jon*_*eet 38
通常,单例不是静态类 - 单例将为您提供类的单个实例.
我不知道你见过的例子,但通常单例模式在C#中可以非常简单:
public sealed class Singleton
{
    private static readonly Singleton instance = new Singleton();
    static Singleton() {} // Make sure it's truly lazy
    private Singleton() {} // Prevent instantiation outside
    public static Singleton Instance { get { return instance; } }
}
这并不困难.
单例相对于静态成员的优点是类可以实现接口等.有时这很有用 - 但有时候,静态成员确实也会这样做.此外,以后通常更容易从单例移动到非单例,例如将单例作为"配置"对象传递给依赖类,而不是那些进行直接静态调用的依赖类.
就个人而言,我会尽量避免使用单身人士 - 除了其他任何事情之外,他们会更加努力地进行测试.它们偶尔会有用.
有几种模式可能适合你,单身是最糟糕的模式之一.
注册处
struct Data {
  public String ProgramName;
  public String Parameters;
}
class FooRegistry {
  private static Dictionary<String, Data> registry = new Dictionary<String, Data>();
  public static void Register(String key, Data data) {
     FooRegistry.registry[key] = data;
  }
  public static void Get(String key) {
     // Omitted: Check if key exists
     return FooRegistry.registry[key];
  }
}
好处
缺点
静态类
class GlobalStuff {
  public static String ProgramName {get;set;}
  public static String Parameters {get;set;}
  private GlobalStuff() {}
}
好处
缺点
简单的单身人士
class DataSingleton {
  private static DataSingleton instance = null;
  private DataSingleton() {}
  public static DataSingleton Instance {
     get {
         if (DataSingleton.instance == null) DataSingleton.instance = new DataSingleton();
         return DataSingleton;
     }
  }
}
好处
缺点
我个人喜欢注册表模式,但YMMV.
您应该看一下依赖注入,因为它通常被认为是最佳实践,但这里解释的主题太大了: