struct new出来之后是建立在stack上的而不是在heap上
代码如下:
...
{
System.Drawing.Point p; //问题1:这个p也是一个Reference吗?
{
p = new System.Drawing.Point(123,456);
} //问题2:在这个}之后为什么new出来的Point没有被销毁,它是建立在stack上的,那他什么时候被销毁呢?
}
...
请教大家
代码如下:
...
{
System.Drawing.Point p; //问题1:这个p也是一个Reference吗?
{
p = new System.Drawing.Point(123,456);
} //问题2:在这个}之后为什么new出来的Point没有被销毁,它是建立在stack上的,那他什么时候被销毁呢?
}
...
请教大家
比如
private void Form1_Load(...)
{
System.Drawing.Point p;
{
p = new System.Drawing.Point(123,456);
} //再问一下:
int x; //这时会为x在stack上开辟空间吗?好象要吧
x = 1; //Okey
System.Drawing.Point pp; //pp是stuct同样会在stack上开辟空间,但是没有new
pp.X = 1 //Compile-time error 为什么?
}
{
p = new System.Drawing.Point(123,456);
}
这是什么代码?
{
p = new System.Drawing.Point(123,456);
}
这样的代码好象可以通过编译的 仅仅是忽略花括号 不过不推荐这样的写法int x; //没有为x分配空间,这时使用x的话 就会提示使用未赋值的变量
x = 1; //此处相当于x=new int(1); int是基元类型,系统支持直接赋值. (用reflector看不到int源代码的更多的信息,看decimal类型的时候可以知道decimal有个=的操作符重载)System.Drawing.Point不是基元类型 使用前必须显式分配空间另外的 Sunmast(速马/MVP) 大哥已经说得很清楚了 :)
这句话是什么意思?
System.Drawing.Point 是值类型
例如:
System.Drawing.Point p; //这里已经为p在stack上开辟了空间了
p = new Point(123,456); //这个new运算符并不会为p开辟空间,它只起个初始化的作用
是这样吧?
//int类型有=的操作符重载(reflector看不到,或者这就是基元类型的表现之一吧)
//当你直接赋值,如果变量没初始化 也就是没有开辟储存空间,系统会自动帮你开辟一个
//如果你定义了个int变量之后没有给他赋值,系统就会提示不能使用为初始化的变化
//类型定义之后还没有开辟空间 也就是没有初始化 同一个意思