2014-09-05 57 views
2

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

例如Singleton设计:

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

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

这怎么是可能的。它尚未宣布。它就像一个递归函数。我无法理解这个逻辑。

回答

0

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

0

有趣的问题!

认为你的课是一个想法。编译器自己知道你的想法,因为它在同一个区域(命名空间)。所以编译没有问题。

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

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

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

总结我的ramblings:没有这种模式引起的递归,因为你永远不会从调用内部构造类来构造它。如果您的Instance属性试图调用自己来获取和实例,那会导致递归。


  1. 顺便说一句,在堆栈上的剩余空间可以根据你有多少已经放置在栈上是相当小的。这个尾递归逻辑应该总是被一个循环替换:Recursive Function Calls Throw StackOverFlowException
相关问题