类
class myclass
{
int x = 10;
int y = this.x;
}
编译以后是不是变成下面的形式了啊
class myclass
{
int x;
int y;
myclass()//构造函数
{
x = 10;
y = this.x;
}
}
如有错误,请指正
class myclass
{
int x = 10;
int y = this.x;
}
编译以后是不是变成下面的形式了啊
class myclass
{
int x;
int y;
myclass()//构造函数
{
x = 10;
y = this.x;
}
}
如有错误,请指正
{
int x = 10;
int y = this.x;
}這樣能編譯通過嗎?
class myclass
{
int x = 10;
int y = this.x;
}是不行,
所有初始化操作只能在构造函数里面才可以。
是不能通过啊,您能说说为什么不能通过啊,我发这个贴的最终目的就是要各位高手帮我解决这个
问题的(我要知道原理)。
但由于不能保证所有field的初始化顺序,C#编译器禁止在一个field的初始化语句中直接引用另一个field的值但是属性(property)可以,因为它本质上是方法,不存在这个问题
一个类的执行的循序应该是:
分配内存-》初始化默认值-》调用构造器
所以,应该不是未分配内存引起的
初始化循序是无所谓的,
因为“y = this.x”是在x和y都在
初始化默认值(0)以后执行的,
所以他们的循序无所谓(至少在编译的时候不会出错),
如果x比y先初始化,y就得到10
反之,y就得到x的默认初始化值0;
int x = y;
int y = 5;这样如果通过编译并执行,x的值应该是0
但是你没仔细想的话,或者一个新手,肯定会被迷惑,以为应该是5所以C#编译器干脆选择了视这种代码为错误,我想这是明智的选择