【问题标题】:Class property with same type like used in Singleton Pattern Design与单例模式设计中使用的类型相同的类属性
【发布时间】:2014-09-05 12:09:13
【问题描述】:

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

例如单例设计:

public class Singleton
{
    private static Singleton instance;

    private Singleton() {}

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

这怎么可能。它还没有被宣布。它就像一个递归函数。我无法理解其中的逻辑。

【问题讨论】:

    标签: c# class properties singleton


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      有趣的问题!

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

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

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

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

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


      1. 顺便说一句,堆栈上的剩余空间可能非常小,具体取决于您已经在堆栈上放置了多少。此尾递归逻辑应始终替换为循环:Recursive Function Calls Throw StackOverFlowException

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-24
        • 1970-01-01
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 1970-01-01
        • 2015-03-24
        相关资源
        最近更新 更多