关于C#中 struct使用new 初始化
我们实例化一个结构体,使用 new 运算符,这不同于类使用 new 语句,我们知道对一个类使用new语句会在托管堆上分配空间,而struct是值类型,所以应该在栈上为其分配空间 ;使用 new ,C#会认为结构体中的成员已经得到初始化,字段会被初始化为默认值0,而不是用 new 会被认为没有初始化,使用字段会报错
但是,如果结构体是类的字段,则会在堆上分配空间
测试代码1

using System;
public class Program
{
public static void Main()
{
Point p1;
Point p2 = new Point();
//Console.WriteLine("{0},{1}", p1.x, p1.y); //未赋值,编译报错
Console.WriteLine("{0},{1}", p2.x, p2.y);
}
}
struct Point{
public int x; //未对字段赋值,默认值为0
public int y; //未对字段赋值,默认值为0
}
测试代码2

using System;
struct Point
{
public double x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public double R(){
return Math.Sqrt(x*x+y*y);
}
}
class Test
{
static void Main() {
Point[] points = new Point[100];
for (int i = 0; i < 100; i++)
points[i] = new Point(i, i*i);
}
}

3万+

被折叠的 条评论
为什么被折叠?



