c# - 如何在 C# 中返回静态类实例

标签 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;
        }
    }
}

最佳答案

静态类的实例是不存在的。单例模式只是将类的相同实例返回给重复的请求。

您可能会感到困惑:

private static MyClass _myInstance;

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

一些注意事项:

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

进一步阅读:Jon Skeet 有一篇关于实现 Singletons in C# In Depth 的精彩文章.我建议您阅读和研究这篇文章,直到您理解它为止。挺好的。

关于c# - 如何在 C# 中返回静态类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10514729/

相关文章:

Java 双重检查锁定

c# - 可枚举包含可枚举

c# - 系统参数异常 : The header has an empty value

c# - 如何在C#中指定相对SQLite数据库路径?

具有完整名称的 C# Enum.ToString()

haskell - 使 "The Singletons Paper"保持最新。如何使用单例库实现 AChar 数据类型

java - 我应该创建许多单例或单例上下文来引用我的状态和对象吗?

javascript - 如何定义一个 CoffeeScript 类,在第一次实例化时加载 jQuery,然后触发回调?

c# - 用户界面设计 : Ideas For User Look-Up/Selecting User

c# - 为什么选择静态类而不是单例实现?