如何使用静态成员创建.NET接口?

4th*_*ace 12 .net singleton design-patterns interface

在.NET 3.5中,我想创建一个单例接口:

interface ISingleton <T>
{
  public static T Instance {get;}
}
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,但我喜欢.有什么建议?

编辑:我只是想知道所有singeltons将有一个名为Instance的类类型的静态属性.它总是在那里.界面将是表达这一点的明确方式.

Mat*_*ker 12

据我所知,接口不能成为Singleton,因为它实际上并不存在.接口是实现必须遵循的合同.因此,实现可以是单例,但接口不能.

  • C#中的AFAIK接口不能有静态成员.但是,存在一些静态成员有用的实例.例如,您需要一个CONTRACT实现,但所有这些实现碰巧需要一个在对象实例之间共享的分类器.这不是我第一次需要这样的东西. (2认同)

And*_*nan 7

虽然我同意其他海报上的单例非常过度使用,但是你的问题的一个可能的解决方案是提供一个抽象基类,其中包含派生单例的类型参数:

public abstract class Singleton<T> where T : Singleton<T>
{
  private static T _instance;

  public static T Instance
  {
    get { return _instance; }
    protected set { _instance = value; }
  }
}
Run Code Online (Sandbox Code Playgroud)

从Singleton派生的任何类都将具有正确类型的静态Instance属性:

public class MySingleton : Singleton<MySingleton>
{
    static MySingleton()
    {
        Instance = new MySingleton();
    }

    private MySingleton() { } 
}
Run Code Online (Sandbox Code Playgroud)

在使用类似的东西之前,你应该考虑是否需要单例,或者你是否更适合使用普通的静态类.