Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
 Аватар для Андрей Дружинин
3 / 3 / 0
Регистрация: 10.02.2014
Сообщений: 45

Копирование по значению и по ссылке

10.05.2014, 22:26. Показов 3723. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните что означает копировать по значению, а не по ссылке, и наоборот, а так же что такое стек и управляемая куча
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2014, 22:26
Ответы с готовыми решениями:

Сделать копирование в ссылочном типе данных как по значению, так и по ссылке
Ни когда не разбирался с этим фэйлом, но сейчас очень нужно. Сделаю набросок, для наглядности d a = new d(), b = new d(), c = new...

Передача по ссылке и по значению
Эта тема стара как мир, но я хотел уточнить одну вещь. QBluetoothAddress* address = new...

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

34
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.05.2014, 23:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DataPlanner Посмотреть сообщение
Нет, по-моему без разницы, вы видете разницу? Поделитесь с нами священным знанием.
разница в том, что это разные вещи
0
10.05.2014, 23:44

Не по теме:

Psilon, а что это за коротка версия? Та что у меня на 900 с лишним страниц...

0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.05.2014, 23:46
Пример №1:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        static void Main(string[] args)
        {
            var enumerator = new List<int> {1, 2, 3}.GetEnumerator();
            while (MoveNext(enumerator))
            {
                Console.WriteLine(enumerator.Current);
            }
        }
 
        private static bool MoveNext(List<int>.Enumerator enumerator)
        {
            return enumerator.MoveNext();
        }
пример №2:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        static void Main(string[] args)
        {
            var enumerator = new List<int> {1, 2, 3}.GetEnumerator();
            while (MoveNext(ref enumerator))
            {
                Console.WriteLine(enumerator.Current);
            }
        }
 
        private static bool MoveNext(ref List<int>.Enumerator enumerator)
        {
            return enumerator.MoveNext();
        }
чувствуем разницу?..
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
10.05.2014, 23:46
Цитата Сообщение от DataPlanner Посмотреть сообщение
Нет, по-моему без разницы, вы видете разницу?
Вы в этом уверены? Передайте в метод структуру с открытым полем типа, к примеру, int и измените внутри. А потом распечатайте. А потом передайте класс, тоже с открытым полем. И проделайте то же самое. У будет вам разница...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
10.05.2014, 23:48
insite2012, пример выше лучше прочищает мозг Потому что такие особенности поведения воспринимаются как баги среды, хотя отвечают спецификации. Но при этом совершенно неожиданны для новичка
0
 Аватар для Андрей Дружинин
3 / 3 / 0
Регистрация: 10.02.2014
Сообщений: 45
10.05.2014, 23:54  [ТС]
insite2012, я кстати тоже не нашел с 400л. книжку, только 900 листов, Psilon, где вы нашли на 400л. версию?)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
10.05.2014, 23:55
Psilon, согласен, но он не очень очевиден. И воспринимается потруднее. А вот очевидный и наглядный пример.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication17
{
    class Program
    {
        static void Main(string[] args)
        {
            MyStruct ms = new MyStruct() { X = 20 };
            MyClass mc = new MyClass() { X = 20 };
 
            Console.WriteLine("Before:");
            Console.WriteLine("MyStruct.X = {0}",ms.X);
            Console.WriteLine("MyClass.X = {0}",mc.X);
 
            Method_1(ms);
            Method_2(mc);
 
            Console.WriteLine("After:");
            Console.WriteLine("MyStruct.X = {0}", ms.X);
            Console.WriteLine("MyClass.X = {0}", mc.X);
 
            Console.ReadLine();
        }
        public static void Method_1(MyStruct ms)
        {
            ms.X = 40;
        }
        public static void Method_2(MyClass mc)
        {
            mc.X = 40;
        }
    }
    struct MyStruct
    {
        public int X;
    }
    class MyClass
    {
        public int X;
    }
}
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
10.05.2014, 23:56
Пардон, коллеги, разницы так и не уловил. Давайте поконкретней, нам нужно сделать набор операций с переменной, какой тип лучше для этого подходит? И почему?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
11.05.2014, 00:01
DataPlanner, ну вот возьмите мой пример. Если использовать структуру, то будет трудноуловимый баг. При этом его не очень легко найти в коде из 5 строк, а если их будет раз в 100 больше, то можно будет искать неделями, в чем причина, если не знать разницу между структурами и классами.
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
11.05.2014, 00:07
Ваши примеры посмотрел, они не совсем подходят для демонстрации преимуществ разделения типов.
0
101 / 101 / 15
Регистрация: 23.05.2012
Сообщений: 260
11.05.2014, 00:14
Да потому что разницы нет
Для программиста так подавно
Есть только разница в использовании

А Суть ее
Цитата Сообщение от Psilon Посмотреть сообщение
то можно будет искать неделями
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
11.05.2014, 00:18
Цитата Сообщение от DPW Посмотреть сообщение
Да потому что разницы нет
Разница есть и очень значительная.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.05.2014, 00:18
DPW, это как нет? Взгляните на мой пример. В обоих случаях в метод передается параметр (БЕЗ модификаторов ref/out. Однако поле структуры после метода неизменно, чего не скажешь о классе. Вот и огромная разница. Вроде бы передавали по значению (как бы), а поле в классе изменилось.
0
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
11.05.2014, 00:35
Что-то никто так и не упомянул, как Value Type ведет себя в стеке и почему итерации с Reference Type выполняются намного быстрее.
0
11.05.2014, 15:06
 Комментарий модератора 
Коллеги, мне и самому нравится дискутировать на тему языка, но ТС, думаю, получил ответ на свой вопрос (и даже с избытком), поэтому прошу не развивать тему дальше заданного ТС вопроса.
Оффтоп перенесен сюда:
Оффтоп из темы про ValueType-ReferenceType
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2014, 15:06

Передача в метод по ссылке и по значению
Запутался малость... class Program { static void Main(string args) { List&lt;string&gt;...

С - > C# Передача значений по ссылке и значению
Есть Си функция: double lagrange(double X, double *Xi, double *Yi, int n) //Аппроксимация многочленом Лагранжа. { int i, k; ...

Передача объекта по ссылке или о значению
Да, да, снова этот вопрос. Допустим у меня есть объект Student с полями String surname и String name. Этот объект лежит двух разных листах....

Сравнение утраивания переменной по значению и по ссылке
У Дейтлов есть задача: Я написал такой код: #include&lt;iostream&gt; using namespace std; #include&lt;windows&gt;

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


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru