在C#中使用带有结构的new

时间:2017-02-02 05:06:01

标签: c# struct

这对我来说将是一个令人尴尬的问题,但他们说没有更糟糕的问题,没有人问过。 所以我在C#中维护其他代码。几乎没有问题,但有些东西困扰着我。 有两种类型的结构:

private struct Struct1
{
    public string name; 
    public int numX; 
    public int[] numA;  
    public int[,] x; //x coordinate
    public int[,] y; //y coordinate
}
private struct struct2
{
    public string name; 
    public double[] coA; 
    public double[] coB; 
    public double[] coC; 
    public double[] coD;
}
Struct1[] arrayOfS1;
Struct1 exOfS1;
Struct2[] arrayofS2;
Struct exOfS2;

他们似乎非常相似。 之后在Form Load函数中我们实例化它们

int k;
for(k=0;k<MAX_ENTRY;k++)
{
    arrayOfS1[k].numA = new int[MAX_BOUNDARY];
    arrayOfS1[k].x = new int[MAX_BOUNDARY, MAX_POINT];
    arrayOfS1[k].y = new int[MAX_BOUNDARY, MAX_POINT];
}
exOfS1.numA = new int[MAX_BOUNDARY];
exOfS1.x = new int[MAX_BOUNDARY, MAX_POINT];
exOfS1.y = new int[MAX_BOUNDARY, MAX_POINT];

和其他结构类似的东西。 但我的问题是:之前我们这样做:

arrayOfS1=new Struct1[MAX_ENTRY];
exOfS1= new Struct1(); //<------WHY THIS!!?
arrayOfS2= new Struct2[MAX_ENTRY];
//exOfS2=new Struct2(); //<----Why NOT this???

正如你所看到的那样,结构数组是用new来实例化的。在两个案例中。但对于只包含其中一个结构的变量,只有第一个(exOfS1)用new实例化,而不是第二个。 无论如何,我的问题是 是否需要使用new创建exOfS1和exOfS2?

在代码中我只有一个用new创建,我想知道为什么?这是不必要的吗?

2 个答案:

答案 0 :(得分:0)

结构是值类型,它们使用其所有字段的默认值进行初始化。因此,您不需要使用new关键字来创建结构 - 如果它是一个类的字段,它就已经被创建了。

答案 1 :(得分:0)

为了让它更加混乱,实际上不需要new,因为struct是值类型:

struct a { public int i; }

a b, c;
b.i = 1;
c.i = 2;
Debug.Print(b.i + "," + c.i); // "1,2"