Страница 75 из 502
<b>int[] [,] jagged = new int [ 3] [,];</b>
В следующей строке кода элементу массива jagged[0] присваивается ссылка на массив размерами 4x2.
<b>jagged[0] = new int [4, 2];</b>
А в приведенной ниже строке кода элементу массива jagged[0] [1,0] присваивается значение переменной i.
<b>jagged[0][1,0] = i;</b>
Присваивание ссылок на массивы
Присваивание значения одной переменной ссылки на массив другой переменной, по существу, означает, что обе переменные ссылаются на один и тот же массив, и в этом отношении массивы ничем не отличаются от любых других объектов. Такое присваивание не приводит ни к созданию копии массива, ни к копированию содержимого одного массива в другой. В качестве примера рассмотрим следующую программу.
<b>// Присваивание ссылок на массивы.</b>
<b>using System;</b>
<b>class AssignARef { </b>
<b> static void Main() { int i;</b>
<b> int[] numsl = new int [10]; </b>
<b> int[] nums2 = new int [10];</b>
<b> for(i=0; i < 10; i++) numsl[i] = i;</b>
<b> for(i=0; i < 10; i++) nums2[i] = -i;</b>
<b> Console.Write("Содержимое массива numsl: "); </b>
<b> for(i=0; i < 10; i++)</b>
<b> Console.Write(numsl[i] + " ");</b>
<b> Console.WriteLine() ;</b>
<b> Console.Write("Содержимое массива nums2: "); </b>
<b> for(i=0; i < 10; i++)</b>
<b> Console.Write(nums2[i] + " ") ;</b>
<b> Console.WriteLine() ;</b>
<b> nums2 = numsl; // теперь nums2 ссылается на numsl</b>
<b> Console.Write("Содержимое массива nums2n" + "после присваивания: "); </b>
<b> for(i=0; i < 10; i++)</b>
<b> Console.Write(nums2[i] + " ") ;</b>
<b> Console.WriteLine() ;</b>
<b> // Далее оперировать массивом numsl посредством </b>
<b> // переменной ссылки на массив nums2. nums2[3] = 99;</b>
<b> Console.Write("Содержимое массива numsl после измененияn" + </b>
<b> "посредством переменной nums2: "); for (i=0; i < 10; i++)</b>
<b> Console.Write(numsl[i] + " ") ;</b>
<b> Console.WriteLine() ;</b>
<b> }</b>
<b>}</b>
Выполнение этой программы приводит к следующему результату.
<b>Содержимое массива numsl: 0 1 2 3 4 5 6 7 8 9</b>
<b>Содержимое массива nums2: 0 -1 -2 -3 -4 -5 -6 -7 -8 -9</b>
<b>Содержимое массива nums2</b>
<b>после присваивания: 0 1 2 3 4 5 6 7 8 9 </b>
<b>Содержимое массива numsl после изменения </b>
<b>посредством переменной nums2: 0 1 2 99 4 5 6 7 8 9</b>
Как видите, после присваивания переменной nums 2 значения переменной numsl обе переменные ссылки на массив ссылаются на один и тот же объект.
Применение свойства Length
Реализация в C# массивов в виде объектов дает целый ряд преимуществ. Одно из них заключается в том, что с каждым массивом связано свойство Length, содержащее число элементов, из которых может состоять массив. Следовательно, у каждого массива имеется специальное свойство, позволяющее определить его длину. Ниже приведен пример программы, в которой демонстрируется это свойство.
<b>// Использовать свойство Length массива.</b>
<b>using System;</b>
<b>class LengthDemo { </b>
<b> s</b><b>tatic void Main() {</b>
<b> int[] nums = new int[10];</b>
<b> Console.WriteLine("Длина массива nums равна " + nums.Length);</b>
<b> // Использовать свойство Length для инициализации массива nums. </b>
<b> for(int i=0; i < nums.Length; i++) nums[i] = i * i;</b>
<b> // А теперь воспользоваться свойством Length </b>
<b> // для вывода содержимого массива nums.</b>
<b> Console.Write("Содержимое массива nums: "); </b>
<b> for(int i=0; i < nums.Length; i++)</b>
<b> Console.Write(nums[i] + " ");</b>