С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2

Сделать копирование в ссылочном типе данных как по значению, так и по ссылке

27.12.2011, 21:41. Показов 3179. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ни когда не разбирался с этим фэйлом, но сейчас очень нужно.

Сделаю набросок, для наглядности
C#
1
2
3
4
5
6
d a = new d(), b = new d(), c = new d();
a.k = 1;
b.k = 2;
с = a;
b = c;
a.k = 5;// b.k = 5, c.k = 5
C#
1
2
3
4
 public class d
{
   public int k;
}
b и с приобретают сразу ссылку на а. Как можно избежать ссылки?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2011, 21:41
Ответы с готовыми решениями:

Копирование по значению и по ссылке
Объясните что означает копировать по значению, а не по ссылке, и наоборот, а так же что такое стек и управляемая куча

как сделать так, чтобы скрипт постоянно переходил по ссылке
Подскажите, как сделать чтобы скрипт постоянно переходил по ссылке(после перехода он вернется на ту же страницу), но при появлении на...

Как сделать так, чтобы по ссылке класса А оказался класс Б
Добрый день! Есть Dictionary, содержащий экземпляры класса "Книга". Есть другие классы, ссылающиеся на эти экземпляры, допустим на А....

8
 Аватар для FtarG
138 / 138 / 42
Регистрация: 02.11.2010
Сообщений: 316
27.12.2011, 22:09
Вероятно не совсем уловил суть вопроса, но возможно конструктор копий поправит ситуацию?
0
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
27.12.2011, 22:13  [ТС]
Типа этого :
C#
1
с = new d(a);
?
0
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
27.12.2011, 22:18
это не баг, а фича) надо передавать по значению, так объяви "d" не классом (class), а структурой (struct). а так, если что не устраивает, рекомендую почитать любую книгу по C# для новичков...
0
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
27.12.2011, 22:21  [ТС]
Цитата Сообщение от Mikant Посмотреть сообщение
не классом (class), а структурой (struct)
А если класс встроенный, тогда что?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
27.12.2011, 22:29
Цитата Сообщение от VASSUV Посмотреть сообщение
А если класс встроенный, тогда что?
Тогда идти окольными путями.
Например, реализовать метод DeepClone
1
Заблокирован
27.12.2011, 22:42
VASSUV, а зачем это вам? И насколько это вам нужно?(ведь есть же более простые методы решения того, что вы поставили как задачу вначале).
Цитата Сообщение от VASSUV Посмотреть сообщение
b и с приобретают сразу ссылку на а. Как можно избежать ссылки?
Почленное присваивание(о массивах(классах в даном случае), или сразу объявить).

(Если честно, с кода ничего не понятно).

Добавлено через 4 минуты
Либо в функцию через ref или out передавать параметры, но вас это не устроит.
0
MiThEoN
 Аватар для VASSUV
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
27.12.2011, 23:53  [ТС]
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
а зачем это вам
У меня задача такая что нужно работать с изображениями,а в частности с точками, и когда я их часто начинаю копировать, выходят такие вещи о которых я думать два часа назад и не мог.

Но теперь мне все понятно стало. Спасибо всем
1
 Аватар для ibmpc
80 / 78 / 10
Регистрация: 29.12.2011
Сообщений: 183
29.12.2011, 01:19
C#
1
2
3
4
5
6
d a = new d(), b = new d(), c = new d();
a.k = 1;
b.k = 2;
с = a;
b = c;
a.k = 5;// b.k = 5, c.k = 5
По моему все предельно ясно. Нужно реализовать интерфейс ICloneable (его единственный метод Clone в частности) если есть возможность. Если возможности нет реализовать похожий метод, который будет возвращать копию объекта, а не ссылку на него и/или его члены. Чтобы было понятнее как реализовывать смотреть пример реализации в литературе или интернете. В будущем пригодится.

MSDN

интерфейс ICloneable
Поддерживает копирование, при котором создается новый экземпляр класса с тем же значением, что и у существующего экземпляра.
Интерфейс ICloneable содержит один член, Clone, предназначенный для поддержки копирования помимо выполняемого с помощью метода MemberwiseClone - неполное копирование.

Object Clone()
Возвращает новый объект, являющийся копией этого экземпляра.
Заметки
Метод Clone может быть реализован как операция глубокого или неполного копирования. При глубоком копировании дублируются все объекты, тогда как при неполном копировании дублируются объекты только верхнего уровня, а нижние уровни содержат ссылки.
Полученная копия должна быть того же типа, что и исходный экземпляр, или совместима с ним.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2011, 01:19
Помогаю со студенческими работами здесь

Как сделать так чтобы переменная не возращалась к исходному значению
Здравствуйте! Помогите пожалуйста, когда жму на кнопку срабатывает игра, счёт игрока и казино меняется в зависимости от ставки, но когда...

Передача данных по значению и по ссылке
Всем привет! Помогите плз разобраться в передаче данных в качестве параметров функции. *var и &var в чем между ними разница,...

Как сделать,у меня сервер обычная XP,как мне правильно сделать так,что бы некоторые компы отрезать от инета,но не от базы данных(К+ и 1С и т.п)
Система токая,инет идет на модем,с модема идет на хаб,с хаба на всех??? какой прогой лучше воспльзываться?? если есть возможнасть то...

Как копировать элемент по значению, а не по ссылке
int s; for(int i=0; i<10; i++) { s=i; } Console.WriteLine(s); В данном контексте s не получает никакого значения. Помогите мне...

Как передается значение переменной (по ссылке / значению) ?
Готовлюсь я значит к интервью, и тут нахожу вот такой ответ на вопрос в заголовке. Я то для себя понимаю как все происходит, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru