2017-02-02 4 views
1

Это будет смущающий вопрос для меня, но они говорят, что нет еще худшего вопроса, о котором никто не спрашивал. Итак, я поддерживаю код другого пользователя на C#. Почти нет проблем, но есть что-то, что меня беспокоит. Есть несколько Структуры двух типов:с использованием новых с structs в 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; 

Они кажутся совершенно аналогичное право. После этого в функции загрузки формы мы создаем их

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??? 

Как вы можете видеть массив структур инстанцируются с новым, как они должны быть. В и случаях. Но для переменных, которые содержат только одну из структур, только первый (exOfS1) создается с помощью нового, а не второго. В любом случае, мой вопрос будет Do exOfS1 и exOfS2 необходимо создать с новым ??

В коде у меня есть только один, созданный с новым, и мне интересно, почему? Это не нужно?

+2

Я не уверен, я вижу разницу между этими двумя линиями «Почему это» и " Почему не это, кроме типа структуры? – Rob

+1

Я предполагаю, что эта строка 'arrayOfS1 = new Struct2 [MAX_ENTRY];' должна быть: 'arrayOfS2 = new Struct2 [MAX_ENTRY];'? – JanR

+0

да извините, я его отредактировал – KansaiRobot

ответ

0

Структуры представляют собой типы значений, и они инициализируются значениями по умолчанию для всех их полей. Таким образом, вам не нужно использовать новое ключевое слово для создания структуры - оно уже создано, если оно является полем класса.

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" 

 Смежные вопросы

  • Нет связанных вопросов^_^