C # массивы структур и выполнения заданий - PullRequest
2 голосов
/ 14 марта 2012

Предположим, у меня есть этот код:

struct Normal
{
    public float x;
    public float y;
}

class NormalContainer
{
   public Normal[] Normals
   {
       get; set;
   }
}

class Main
{
     void Run( NormalContainer container )
     {
         Normal[] normals = container.Normals // 1 - see below
         normals[5].x = 4;                    // 3 - see below
         container.Normals = normals;         // 2 - see below
     }
}

Создает ли (1) копию массива или это ссылка на память, занятую массивом?Как насчет (2)?

Спасибо

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Array является ссылочным типом, поэтому вы просто копируете ссылку в экземпляр массива.

2 голосов
/ 14 марта 2012

Массив в C # является ссылочным типом.Такие элементы, как назначение, создают копии ссылки и значения.В конце (1) вы получите локальную ссылку на массив, хранящийся в container

Примечание: в C # правильнее будет сказать «ссылка на объект» против «ссылка на память»«

1 голос
/ 14 марта 2012

(1) копирует ссылку на массив

(2) то же самое

Переменные массива являются ссылочными типами, независимо от их базового типа элемента, поэтому всякий раз, когда вы назначаете переменную массива другой, выпросто копируем ссылку.

...