初始化在构造
能否请你告诉我它们的区别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
关键字那些我们初始化构造数据 对象创建之前......但在这里,当我们尝试后 它创造出这种行为的对象的初始化数据..
你能告诉我为什么......
,因为你是一个名为Person类的定义里面你得到一个堆栈溢出,你要创建里面是同一类的多个对象。当创建这些Person对象时,他们也会尝试创建更多的Person对象,等等。
这个递归定义吹的堆栈,因为它是无限的,永远不会结束。
尝试定义这个代码块:
Person[] people = {
new Person { Name="Allen Frances", Age=11, CanCode=false },
new Person { Name="Burke Madison", Age=50, CanCode=true }
}
在代码中,也许主要方法的不同部分?
值得注意的是,堆栈代码的语义也是不正确的,或者最好是奇怪的。类中的实例字段应该包含关于类实例的一些信息,或者对由实例拥有或包含在其中的对象的引用。一个人通常不会包含其他人!所以这个代码实际上不工作的事实并不是那么麻烦。如果OP想要在某个地方保存一个人员列表,那么它应该可能位于“People”类或“PersonRepository”类中。 – phoog 2012-04-13 06:23:19
谢谢回复。但是,当我使用Static关键字时,它没有显示错误。 – 2012-04-21 06:14:04
因为静态意味着它被绑定到类定义上,而不是实例。所以这条线只会运行一次,而不是每次创建一个人。尽管这是有效的,但这是错误的地方来保存人员名单,并且应该在程序的更高层次上完成。 – yamen 2012-04-21 07:50:59
与
Person[] people = new Person[2] {
new Person { Name="Allen Frances", Age=11, CanCode=false },
new Person { Name="Burke Madison", Age=50, CanCode=true }
};
尝试请与改写确切的代码示例的问题(比如,我没有看到'out'keyword在你的代码)。此外,仅对代码使用代码块(缩进)来使问题可读。 – 2012-04-13 06:10:43