在一个采访问题中,我被问到这个问题,我回答说我们可以通过私有构造函数实现这一点,但我不确定。这是对的吗?我想要更多解释和其他方法(如果有的话)来实现这一点。
抱歉,如果这听起来很蠢。我实际上正在学习OO设计,所以存在很多困惑
答案 0 :(得分:2)
您可能有兴趣查看singleton pattern。查看Jon Skeet关于它的article。
单例模式是软件中最着名的模式之一 工程。从本质上讲,单身人士是一个只允许一个人的类 要创建的单个实例,通常很简单 访问该实例。
答案 1 :(得分:2)
以下是单身人士的基本实现:
public class Singleton
{
public static Singleton Instance = new Singleton();
private Singleton() { }
}
由于私有构造函数,您无法编写此代码:
Singleton singleton = new Singleton();
编译器抱怨:
CS0122'Initton.Singleton()'由于其保护级别而无法访问
但是您可以轻松获得这样的单个实例:
Singleton singleton = Singleton.Instance;
答案 2 :(得分:0)
私有构造函数只是答案的一部分。您还需要一个同一个类的静态实例,以及一个getInstance()方法,返回那个懒惰的初始化实例。
这个问题旨在探讨Singleton模式的知识。
答案 3 :(得分:0)
可以使用以下代码提出用于强制执行Singleton模式的完整最终解决方案,请参阅注释以获得解释。
public final class Singleton {
// A private static variable of the class
private static final Singleton INSTANCE = new Singleton();
// A private constructor so that -
// Singleton singleton = new Singleton();
// the above line throws an exception
private Singleton() {}
// Finally, a private static method to get the instance
// of the class
public static Singleton getInstance() {
return INSTANCE;
}
}
答案 4 :(得分:0)
我知道这是一篇过时的文章,但我认为我可以为以后的访问者节省一些我刚刚遇到的困惑。我不会详细介绍我感到困惑的部分,无论如何您都可能会发现它们。 :)
C#
// Using your class name, not Singleton
public class MyClass
{
// Public so the instance can be seen
public static class MyClass _instance = new MyClass();
// Private constructor so it doesn't create any more instances
private MyClass() { }
// The Public Property that intercepts the creation requests
public MyClass Instance
{
get
{
if (_instance != null)
return _instance; // Pass back the single instance already created
else
{
MyClass _instance = new MyClass();
return _instance;
}
}
}
// Create the rest of your class
public int myInt;
public string myString;
}
// Access it in your program
public MyClass myclass = MyClass._instance;
public Main()
{
myclass.myString = "This is a string inside a Singleton instance of a class.";
Console.WriteLine(myclass.myString);
}
编辑:找到了为什么它不起作用。静态实例必须是公共的。