Программирование на языке C#


Download 1.19 Mb.
Pdf ko'rish
bet40/66
Sana23.10.2023
Hajmi1.19 Mb.
#1717181
1   ...   36   37   38   39   40   41   42   43   ...   66
Bog'liq
Программирование на языке C#

Копирование массива 
Рассмотрим возможности языка 
C#
, позволяющие выполнить 
копирование массива. Напомним, что массив является ссылочной 
структурой, следовательно обычное присваивание одного массива 
другому не приводит к копированию элементов. Оно приводит только 
к инициализации ссылки, т. е. обе ссылки будут смотреть на один и тот 
же участок памяти в куче. 
Такая ситуация может приводить к неприятным последствиям, 
которые связаны с изменениями значений в массиве, с помощью двух 
ссылок. Следовательно, чтобы выполнить копирование, можно либо 
самостоятельно 
организовать 
поэлементную 
запись, 
либо 
воспользоваться методами класса 
Array
. В частности, эту операцию 
выполняют методы 
Clone

Copy

CopyTo

Метод 
Clone()
, создает неглубокую копию массива, т.е. 
копируются только значения элементов массива. Если элементы 
массива относятся к типу значений, то копируются значения 
элементов, если же тип элементов ссылочный, то копируются ссылки, 
но не сами значения. Метод 
Clone
создает только клонированный 
объект типа 
object
, для дальнейшей работы требуется выполнять 
явное преобразование к нужному типу. 
67 


Примеры клонирования массивов 
Рассмотрим клонирование целочисленного массива, элементы 
которого относятся к типу значений (листинг 24). 
int[]arrA = {10,20,30,40};//Объявляем и инициализируем 
массив
int[]arrAClone = null;//Объявляем ссылку на массив. 
object tmpClone = arrA.Clone();//Создаем копию массива arrA с 
помощью метода Clone,полученный результат присваиваем 
переменной tmpClone. 
arrAClone = (int[])tmpClone;//Инициализируем ссылку arrClone, 
явно преобразовывая к типу int[]
Листинг 24. 
Данный пример можем записать более компактно. 
int[]arrA={10,20,30,40};//Объявляем и инициализируем массив 
int[]arrAClone = (int[])arrA.Clone();//Создаем копию массива 
arrA с помощью метода Clone,полученный результат присваиваем 
переменной tmpClone, явно преобразовывая к типу int[]. 
В следующем примере рассмотрим ступенчатый массив, элементы 
которого относятся к ссылочному типу. 
int[][] arrZ = new int[3][];//Объявляем ссылку на структуру 
массив массивов. Создаем массив ссылок, состоящий из трех 
элементов 
arrZ [0] = new int[3]{1,1,1}; 
arrZ [1] = new int[3]{2,2,2}; 
arrZ [2] = new int[3]{3,3,3}; 
// Каждый элемент массива ссылок инициализировали ссылкой на 
массив целых чисел, состоящего из трех элементов
int[][]arrZClone=(int[][])arrZ.Clone();//Клонирование arrZ.
В этом случае происходит копирование только ссылок, в результате 
чего в ячейках 
arrZClone[i]
будут клонированы только адреса из 
arrZ[i]
, следовательно, ячейки 
arrZ[i]
и 
arrZClone[i]
после 
клонирования будут смотреть на один и тот же участок памяти. 

Download 1.19 Mb.

Do'stlaringiz bilan baham:
1   ...   36   37   38   39   40   41   42   43   ...   66




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling