我想获得一个静态类的实例,但如果不在非静态类上实现单例包装器,我似乎无法做到这一点——这可能吗,还是我遗漏了什么?
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/