Программирование на языке C#
Download 1.19 Mb. Pdf ko'rish
|
Программирование на языке C#
- Bu sahifa navigatsiya:
- Примеры клонирования массивов
Копирование массива
Рассмотрим возможности языка 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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling