Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 195 196 [197] 198 199 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#2941
,
|
|
|
|
Цитата IL_Agent @ В любом случае,в C# вызов метода объекта никак не может быть эквивалентен оператору =. А что в С# выполняет оператор = ? |
|
Сообщ.
#2942
,
|
|
|
|
И ещё раз. В первом случае меняется переменная в методе str. Во втором - посредством вызова метода меняется объект, доступ к которому осуществляют переменные. А сами переменные не меняются. Добавлено Цитата KILLER @ А что в С# выполняет оператор = ? ![]() Как ни странно, присваивание значения переменной. |
|
Сообщ.
#2943
,
|
|
|
|
Цитата IL_Agent @ Как ни странно, присваивание значения переменной. Ок, тогда поясни, str внутри метода public void Foo(String str) - это str которая была передана из Bar ? Верно ведь? Мы ведь этой переменной присваиваем значение, почему она не изменится? Кто откатит наши изменения? или оно не присвоится и вывалится ошибка на стадии компиляции? Добавлено Внутри функции Foo, после присваивания, str будет ведь равна - "abcdef", а не "cdefgh"? Если так, то кто и занафига откатил изменения, при выходе из метода Foo? мы ведь не с копией работали Добавлено Цитата IL_Agent @ В первом случае меняется переменная в методе str. Во втором - посредством вызова метода меняется объект, доступ к которому осуществляют переменные. А сами переменные не меняются. Немного не понял, ты тут просто запутался в словах, я сам не додумал что ты имел ввиду, можешь плз перефразировать... |
|
Сообщ.
#2944
,
|
|
|
|
Цитата KILLER @ Ок, тогда поясни, str внутри метода public void Foo(String str) - это str которая была передана из Bar ? Верно ведь? Конечно нет. Это две разные переменные, из разных областей видимости. Если одной из них мы присвоим другой объект - это никак не скажется на второй. Добавлено Цитата KILLER @ ты тут просто запутался в словах С чего ты взял ? Цитата KILLER @ я сам не додумал что ты имел ввиду, можешь плз перефразировать... Если расскажешь, как надо строить фразы, чтобы ты додумывал - попробую |
|
Сообщ.
#2945
,
|
|
|
|
Цитата IL_Agent @ Конечно нет. Это две разные переменные, из разных областей видимости. Если одной из них мы присвоим другой объект - это никак не скажется на второй. Так! Я окончательно запутался, как это нет? А как же тогда работает пример с public void Foo(FooClass foo), разве не получается ли, что мы меняем состояние, с помощью метода, вообще другой переменной? У них же разные области видимости и т.д.? Добавлено Цитата IL_Agent @ С чего ты взял ? С того: Цитата В первом случае меняется переменная в методе str. str - это не метод как минимум, в приведенном примере выше. Цитата Во втором - посредством вызова метода меняется объект, доступ к которому осуществляют переменные. А сами переменные не меняются. Что за переменные, что они хранят? И где там объект? |
|
Сообщ.
#2946
,
|
|
|
|
Цитата KILLER @ метода, вообще другой переменной Переменные - это не объекты. У них нет методов. Переменные осуществляют доступ к объектам. Добавлено В нашем случае - к одному и тому же. Добавлено Цитата KILLER @ В первом случае меняется переменная в методе Foo. fixed Добавлено Цитата KILLER @ Что за переменные str Цитата KILLER @ что они хранят? Если угодно употреблять слово "хранят", то ссылки. Цитата KILLER @ И где там объект? foo |
|
Сообщ.
#2947
,
|
|
|
|
Цитата IL_Agent @ Если угодно употреблять слово "хранят", то ссылки. Хорошо, тогда что хранят переменные типа int ? Ссылки на объекты или же значения? |
|
Сообщ.
#2948
,
|
|
|
|
Цитата IL_Agent @ Никаких усилий. Если ref - присваиваеися тот же самый объект, если value - копия. Мозговые усилия - это когда разбираешь код конструктора копирования / оператора присваивания. Ну, на счёт мозговых усилий при разборе кода конструктора - это, будем считать, ты не говорил. Объясни другое: почему синтаксис языка (C#) допускает неявность семантики переменной? И (как я уже отмечал выше) мне необходимо точно знать семантику типа, чтобы точно предсказывать, к чему приведёт код, который я пишу. В смысле, будет модификация оригинала объекта, или его копии. |
|
Сообщ.
#2949
,
|
|
|
|
Цитата KILLER @ Хорошо, тогда что хранят переменные типа int ? Ссылки на объекты или же значения? Неважно. Можно считать, что ссылки. Просто при присваивании создаётся новый объект. Вообще с помощью переменных осуществляется доступ к объекту. Слово "хранят" тут не очень уместно. В С++ - да, т.к. переменная там - именованная область памяти. Добавлено Цитата Flex Ferrum @ Ну, на счёт мозговых усилий при разборе кода конструктора - это, будем считать, ты не говорил. А что, компилятор С++ не позволяет написать гавнокод в конструкторе ? |
|
Сообщ.
#2950
,
|
|
|
|
Цитата IL_Agent @ А что, компилятор С++ не позволяет написать гавнокод в конструкторе ? Говнокод позволяет написать любой язык. Ты лучше на другую часть вопроса ответь. |
|
Сообщ.
#2951
,
|
|
|
|
Цитата Flex Ferrum @ Говнокод позволяет написать любой язык. Ты лучше на другую часть вопроса ответь. Вопрос: как узнать, как поведёт себя присваивание. c# - посмотреть тип переменной. c++ - разобрать гавнокод кк /operator =. |
|
Сообщ.
#2952
,
|
|
|
|
Цитата IL_Agent @ Неважно. Можно считать, что ссылки. Просто при присваивании создаётся новый объект. Для меня важно, просто в делфях, переменая типа int как раз таки хранит в себе значение а не ссылку на значение, а вот ClassFoo там будет хранить ссылку на объект, поэтому я и поинтересовался... Добавлено Цитата IL_Agent @ Вопрос: как узнать, как поведёт себя присваивание. c# - посмотреть тип переменной. c++ - разобрать гавнокод кк /operator =. Неправильно, С++ - почитать документацию к этой функции... |
|
Сообщ.
#2953
,
|
|
|
|
Цитата IL_Agent @ Вопрос: как узнать, как поведёт себя присваивание. c# - посмотреть тип переменной. c++ - разобрать гавнокод кк /operator =. Эммм... Передёргиваешь. В C++ ответ на этот вопрос - посмотреть на объявление переменной. Если ссылка/указатель - поведение одно. В противном случае - другое. И таки да, я имел в виду не присваивание, а вызов модифицирующего метода. |
|
Сообщ.
#2954
,
|
|
|
|
Цитата KILLER @ Для меня важно, просто в делфях, переменая типа int как раз таки хранит в себе значение а не ссылку на значение, а вот ClassFoo там будет хранить ссылку на объект, поэтому я и поинтересовался... Ну я за Делфи говорить не берусь. В c# нет работы с памятью на физическом уровне. Что, где и как "хранится" - от этого мы абстрагируемся. Добавлено Цитата Flex Ferrum @ В противном случае - другое. В противном случае - разобрать гавнокод кк /operator = ![]() Цитата Flex Ferrum @ И таки да, я имел в виду не присваивание, а вызов модифицирующего метода. А с ним что ? Он одинаково модифицирует что value-, что reference- объект. Просто в случае с value- внутри функции мы уже модифицируем другой объект, копию передаваемого. |
|
Сообщ.
#2955
,
|
|
|
|
Цитата IL_Agent @ В противном случае - разобрать гавнокод кк /operator = Странно, лично мне не приходилось страдать таким Помойму ты что то путаешь, или мы сейчас рассматриваем код, который пишет человек, который вот уже 3-ий день изучает С++ по учебнику "Выучи С++ за 21 день" ? |