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

本文关键字:类型 Design Pattern 属性 Singleton | 更新日期: 2023-09-27 18:20:49

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

例如Singleton设计:

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

这是怎么可能的。它还没有宣布。它就像一个递归函数。我听不懂其中的逻辑。

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

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

有趣的问题!

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

递归函数包含一个付诸实践的想法。如果你递归地调用一个函数,你会一直把它放在计算机的堆栈上,最终会溢出。1

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

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

总结一下我的胡言乱语:这种模式不会导致递归,因为你永远不会导致从一个调用中构造类来构造它。如果你的Instance属性试图调用自己来获取和实例化,那就会导致递归。


  1. 顺便说一句,堆栈上的剩余空间可能很小,这取决于您已经在堆栈上放置了多少。该尾部递归逻辑应始终替换为循环:递归函数调用引发StackOverFlowException