Основы языка C# 2005. Евсеева О.Н - 98 стр.

UptoLike

Составители: 

102
//объявление массива с явной инициализацией
int[ ] x = {5, 5, 6, 6, 7, 7};
//объявление массивов с отложенной инициализацией
int[ ] u, v;
u = new int[3];
for (int i = 0; i < 3; i++) u[i] = i + 1;
//v= {1,2,3}; //присваивание константного массива
//недопустимо
v = new int[4];
v = u; //допустимое присваивание
Arrs.PrintAr1("A", A);
Arrs.PrintAr1("B", B);
Arrs.PrintAr1("C", C);
Arrs.PrintAr1("X", x);
Arrs.PrintAr1("U", u);
Arrs.PrintAr1("V", v);
}
На что следует обратить внимание, анализируя этот текст:
В процедуре показаны разные способы объявления массивов. Вначале
объявляются одномерные массивы A, B и C, создаваемые конструктором.
Значения элементов этих трех массивов имеют один и тот же тип int. Отметим,
что после такого объявления с инициализацией конструктором, все элементы
имеют значение, в данном случаеноль, и могут участвовать в вычислениях.
Массив x объявлен с явной инициализацией. Число и значения его
элементов определяется константным массивом.
Массивы u и v объявлены с отложенной инициализацией. В последующих
операторах массив u инициализируется в объектном стилеего элементы
получают в цикле значения.
Обратим внимание на закомментированный оператор присваивания. В
отличие от инициализации, использовать константный массив в правой части
оператора присваивания недопустимо. Эта попытка приводит к ошибке,
поскольку vэто ссылка, которой можно присвоить ссылку, но нельзя
присвоить константный массив. Что происходит в операторе присваивания
v = u? Это корректное ссылочное присваивание: хотя u и v имеют разное число
элементов, но они являются объектами одного класса. В результате
присваивания память, отведенная массиву v, освободится, ею займется теперь
сборщик мусора. Обе ссылки u и v будут теперь указывать на один и тот же
массив, так что изменение элемента одного массива немедленно отразится на
другом массиве.
Далее определяется двумерный массив w и делается попытка выполнить
оператор присваивания v = w. Это ссылочное присваивание некорректно,
поскольку объекты w и vразных классов и для них не выполняется требуемое
для присваивания согласование по типу.