Array.ConstrainedCopy
из шилдта:
Написал код. Код:
int[] a = { 1, 2, 3, 4, 5 }; 12345 67234 Раскоментируем // a[2] = 0;, выводит следующее: 12045 67234 почему он не выводит ? 12045 67204 Ведь ссылочный тип одинаков у обоих массивов - int[]. И они должны ссылаться на одни и теже элементы после копирования. И чем Array.ConstrainedCopy отличается от перегруженного Array.Copy с сигнатурой аналогичной сигнатуре метода ConstrainedCopy. (Только тем, что в случае неудачного копирования при использовании метода ConstrainedCopy у массива в который копировали не будит изменений?) |
Ответ: Array.ConstrainedCopy
Числа - копируются полностью, а не ссылки на них.
Даже если у тебя в массиве был бы указатель на объект, всё что ты делаешь, то обнуляешь по индексу в данном массиве данное. Если ты хочешь чтобы данное обновилось и во втором массиве, то создай объект содержащий число, и заместо приравнивания элемента к нулю, приравнивай значение объекта к нулю. Далее ссылка на объект в первом и втором массиве будет одна и та же, и изменив значение, оно будет в обоих изменено. Ты копируешь значения, а не указатели на значения. Я не использовал эти функции (как-то не приходилось), но судя по твоему описанию, то ConstrainedCopy - это транзакционная операция, которая при неудаче вернёт всё как оно было. |
Ответ: Array.ConstrainedCopy
Цитата:
|
Ответ: Array.ConstrainedCopy
Что значит "ссылочных" типах массивов?
Массив содержит числа. Каждое число имеет указатель. Что ты делаешь - копируешь сами числа, а не указатели на данные. Таким образом второй массив содержит ничем не связанные данные с первым. Копии же, ты же КОПИРУЕШЬ сами данные. |
Ответ: Array.ConstrainedCopy
Цитата:
вот чо нашел. попробовал следующий код: Код:
int[] a = { 1, 2, 3,4,5}; 02345 12345 12345 Тоесть object ob не ссылается на тот же самый массив. Он создает его копию. Короче хз чо думать =) |
Ответ: Array.ConstrainedCopy
ЧИСЛА НЕ УКАЗАТЕЛИ!
Если ты засунешь туда объекты, то будут копии указателей на объекты, а объект останется одним и тем же. ЧИСЛА - это простые данные, присваивание к ним данных, или присваивание чисел к числам - не операции с указателем, а операции с самими данными. Засунь туда объект, и сделай снова свой эксперимент. |
Ответ: Array.ConstrainedCopy
Цитата:
Код:
class lol 012 Терь все понятно.=) Массивы содержат в каждой ячейке какой то объект. Но Для массивов типов значений (int[] итд), Этот объект является значением. Он и копируется, но дальше никуда не ссылается. А для массивов состоящих из элементов ссылочного типа. Копируется в объекте их адрес. И он ссылается уже на элементы. Которые и являются общими. А для типов значений эти элементы не могут быть общими потому что там вместо адреса само значение. Наверное ты мне это и пытался объяснить с первого поста. xD |
Ответ: Array.ConstrainedCopy
Наверное.
В общем это и есть различие между struct и class. int - value type, lol - reference type. От сюда: http://msdn.microsoft.com/en-us/libr...=vs.71%29.aspx Цитата:
|
Ответ: Array.ConstrainedCopy
Цитата:
Мне было непонятно что и куда конкретно копируется. И как массивы хранят свои значения. Теперь все прояснилось. |
Ответ: Array.ConstrainedCopy
А трудно было прочитать в справке:
Цитата:
|
Часовой пояс GMT +4, время: 18:50. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot