2012-04-13 96 views
0
价值观

能否请你告诉我它们的区别between..the下面的构造函数初始化 的..初始化在构造

这里的人是一类。在我试图初始化一些值... 我已经创建了一个名为

三个属性 “姓名,年龄,CANCODE”

,并呼吁这一个..

//Without Static 

public Class Person 
{ 

    Person[] people = { 
      new Person { Name="Allen Frances", Age=11, CanCode=false }, 
      new Person { Name="Burke Madison", Age=50, CanCode=true } 
    } 

    // with Static...  
    /* 
    static Person[] people = 
    { 
      new Person { Name="Allen Frances", Age=11, CanCode=false }, 
      new Person { Name="Burke Madison", Age=50, CanCode=true } 
    } 
    */ 
    ........... 
} 

当我试图初始化类构造函数没有static关键字.. 它显示“堆栈溢出异常”。

当我调试代码时,这里当为Person类创建对象后 初始化发生了更多时间,我不知道为什么?

我所知道的是,如果你使用的static关键字那些我们初始化构造数据 对象创建之前......但在这里,当我们尝试后 它创造出这种行为的对象的初始化数据..

你能告诉我为什么......

+0

尝试请与改写确切的代码示例的问题(比如,我没有看到'out'keyword在你的代码)。此外,仅对代码使用代码块(缩进)来使问题可读。 – 2012-04-13 06:10:43

回答

4

,因为你是一个名为Person类的定义里面你得到一个堆栈溢出,你要创建里面是同一类的多个对象。当创建这些Person对象时,他们也会尝试创建更多的Person对象,等等。

这个递归定义吹的堆栈,因为它是无限的,永远不会结束。

尝试定义这个代码块:

Person[] people = { 
       new Person { Name="Allen Frances", Age=11, CanCode=false }, 
        new Person { Name="Burke Madison", Age=50, CanCode=true } 
        } 

在代码中,也许主要方法的不同部分?

+0

值得注意的是,堆栈代码的语义也是不正确的,或者最好是奇怪的。类中的实例字段应该包含关于类实例的一些信息,或者对由实例拥有或包含在其中的对象的引用。一个人通常不会包含其他人!所以这个代码实际上不工作的事实并不是那么麻烦。如果OP想要在某个地方保存一个人员列表,那么它应该可能位于“People”类或“PersonRepository”类中。 – phoog 2012-04-13 06:23:19

+0

谢谢回复。但是,当我使用Static关键字时,它没有显示错误。 – 2012-04-21 06:14:04

+0

因为静态意味着它被绑定到类定义上,而不是实例。所以这条线只会运行一次,而不是每次创建一个人。尽管这是有效的,但这是错误的地方来保存人员名单,并且应该在程序的更高层次上完成。 – yamen 2012-04-21 07:50:59

0

Person[] people = new Person[2] { 
       new Person { Name="Allen Frances", Age=11, CanCode=false }, 
        new Person { Name="Burke Madison", Age=50, CanCode=true } 
        };