如何在c#中返回一个静态类实例

Pet*_*teN 8 c# singleton

我想得到一个静态类的实例,但是如果没有在非静态类上实现单例包装,我似乎无法做到这一点 - 这是可能的,还是我错过了什么?

public class MyInstanceTester
 {
    public MyInstanceTester()
    {
        //this is how i get a reference to a singleton now
        MyClass instance1 = MyClass.Instance();
        //this is what is would like to do (if only the compiler would let me)
        MyStaticClass instance2 = MyStaticClass.Instance();
    }
}


public class MyClass
{
    private static MyClass _myInstance;

    static MyClass()
    {
        _myInstance = new MyClass();
    }


    public static MyClass Instance()
    {
        return _myInstance;
    }

}

public static class MyStaticClass
{
    public static MyStaticClass Instance
    {
        get
        {
            return this;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Pau*_*sik 13

没有静态类的实例.单例模式只是将类的同一实例返回给重复的请求.

你可能会感到困惑:

private static MyClass _myInstance;
Run Code Online (Sandbox Code Playgroud)

这仅仅意味着在具有_myInstance作为成员的类型实例化的所有对象中将存在该特定对象的单个实例.

几点说明:

  • this关键字在静态成员中无效
  • 如果你有一个静态类,那么所有成员都必须是静态的,因此this永远不会有效
  • Singleton类不能是静态类
  • 单身人士声明一个静态成员,以帮助确保只存在该类的单个实例
  • 请注意,对对象的静态引用不会使对象成为静态.只有参考是静态的

进一步阅读: Jon Skeet非常出色地介绍了在C#In Depth中实现Singletons.我建议阅读和研究这篇文章,直到你理解它为止.这是非常好的.