在构造函数中初始化值

时间:2012-04-13 06:07:03

标签: c# oop

请告诉我以下构造函数之间的区别 初始化..

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

的属性

"名称,年龄,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关键字的类构造函数时.. 它显示" Stack overFlow Exception。"

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

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

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

2 个答案:

答案 0 :(得分:4)

您正在获得堆栈溢出,因为您位于名为Person的类的定义内,并且您正在尝试在其中创建更多相同类的对象。当创建这些Person对象时,它们也会尝试创建更多Person对象,依此类推。

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

尝试定义此代码块:

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

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

答案 1 :(得分:0)

尝试

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