与Singleton Pattern Design中使用的类型相同的类属性

时间:2014-09-05 12:09:13

标签: c# class properties singleton

我不明白我们如何在尚未创建的类中使用相同的属性和字段类型。

例如Singleton Design:

public class Singleton
{
    private static Singleton instance;

    private Singleton() {}

    public static Singleton Instance
    {
        get 
        {
            if (instance == null)             
            {
                instance = new Singleton();
            }             
            return instance;     
        } 
    } 
}

如何做到这一点。尚未宣布。它就像一个递归函数。我无法理解逻辑。

2 个答案:

答案 0 :(得分:0)

属性和字段是静态的。静态成员不需要创建该类型的对象。它们就像放在<classname>命名空间中的旧程序和函数一样。

答案 1 :(得分:0)

有趣的问题!

将您的课程视为一个想法。编译器本身就知道你的想法,因为它在同一个区域(命名空间)。所以编译没有问题。

递归函数涉及一个实践的想法。如果以递归方式调用函数,则将其放在计算机的堆栈上,最终会溢出。 1

当你在一个类中引用一个类(一个实践的想法)时,你正在创建一个指向类的特定实例(idea)的指针。因此,一个指针可以引用另一个指针,甚至可以引用其中的同一指针。

此外,对于static(或VB中的Shared)变量,对于该类的所有实例,只有一个变量实例。实际上,您实际上不需要类的实例来调用静态成员,属性或函数。

总结我的ramblings:这种模式没有引起任何递归,因为你从不在构造它的调用中构造类。如果您的Instance属性试图将其自身调用为get和instance,则会导致递归。


  1. 另外,堆栈上的剩余空间可能非常小,具体取决于您已经放置在堆栈上的数量。这个尾递归逻辑应该总是用循环替换:Recursive Function Calls Throw StackOverFlowException