Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
||||||
1 | ||||||
Void и Out: что лучше и в чем разница03.08.2012, 16:06. Показов 2167. Ответов 13
Метки нет (Все метки)
В чем разница и что лучше,объясните пожалуйста
его же,но измененного,а в первом я возвращаю новый объект? как лучше,гуманнее и т.д.
0
|
03.08.2012, 16:06 | |
Ответы с готовыми решениями:
13
Какая разница между void и Object System.Void из C# использоваться не может - для получения объекта типа void используйте typeof (void) Глобальные и локальные переменные: что лучше (или что для чего и в чем конкретная разница)? В чем разница или что лучше (сеть)? |
20 / 20 / 0
Регистрация: 05.02.2011
Сообщений: 65
|
|
03.08.2012, 16:15 | 2 |
В первом случае Вы и передаете объект, и получаете его. Во втором же только возвращаете.
Что лучше - зависит только от ваших целей и назначений использования.
1
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|||||||||||
03.08.2012, 16:37 [ТС] | 3 | ||||||||||
Но он возвращается ведь измененный ?
0
|
20 / 20 / 0
Регистрация: 05.02.2011
Сообщений: 65
|
||||||
03.08.2012, 16:45 | 4 | |||||
Как то так:
Поэкспериментируйте с этим кодом. Добавлено через 7 минут Ну ref применяется немного в другом случае. К примеру у нас уже есть сконструированный объект ( Program MC = new Program() ) и у него уже заполнены поля (Name к примеру), и нам нужно передать ЭТОТ (готовый объект) в метод. В этом случае мы применяем ref. А тут у нас имеется MC2, который по сути полуфабрикат, и "превращение" его в полноценный объект будет происходить в методе GetName2, который возвращает нам объект по ссылке, хотя по сути не должен возвращать ничего (void). В таких случаях рекомендуется использовать более простой код как в первом методе, т.к. очень легко запутаться.
1
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
03.08.2012, 16:57 [ТС] | 5 |
Спасибо)
Имеет ли ref прямое отношение к value-type,что б не создавать локальной копии? Добавлено через 31 секунду Не по теме: Напомнил мне паттерны 2 методом:) Добавлено через 6 минут Еще один пример List<int> При передаче в метод,который принимает список,я передам ссылку? а при return возвращаю тоже ссылку,как и с обычным классом? а как поступать с массивами?
0
|
20 / 20 / 0
Регистрация: 05.02.2011
Сообщений: 65
|
|
03.08.2012, 17:08 | 6 |
Вообще можно, я писал "на скорую руку" так что пробуйте.
В смысле ссылку на List? Если да, то я не сталкивался с таким, попробуйте, но могу предположить, что если это такой же тип данных, то можно осуществлять такие же операции над ним. При return Вы возвращаете то, что указано в возвращаемом типе метода, пусть то объект, строка или целочисленный тип, оно не является ссылкой, оно есть результат метода! Аналогично, передайте массив по ссылке или же создайте метод типа: public string[] Method (...)
1
|
Master of Orion
|
||||||
03.08.2012, 18:16 | 7 | |||||
При передаче ссылочного типа в метод в методе можно менять любые его поля, при передаче же по ссылке можно не только менять поля, но и сам объект (напоминаю, что ссылочные типы - это хитро замаскированные автоматически разыменовывающиеся указатели, но все же указатели). То есть при передаче его можно менять его поля, но не ссылку.
1
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
03.08.2012, 18:19 [ТС] | 8 |
Спасибо) задал много глупых вопросов,но теперь мне легче)
А есть там какая-то волшебная вкладочка или несколько что-б отслеживать память,ссылки и т.д.?
0
|
20 / 20 / 0
Регистрация: 05.02.2011
Сообщений: 65
|
|
03.08.2012, 18:28 | 9 |
Ну вся информация что нужна имеется в режиме отладки. Если Вам нужны более расширенные методы, то существует Intel Parallel Studio который является дополнительной утилитой для Visual Studio
1
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
||||||
03.08.2012, 18:29 [ТС] | 10 | |||||
Спасибо) в 1 методе созд локальный массив,почему не передается ссылка,ведь string ссылочный тип?
То-есть если в 1 я сделаю так
0
|
20 / 20 / 0
Регистрация: 05.02.2011
Сообщений: 65
|
|
03.08.2012, 18:39 | 11 |
1
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
03.08.2012, 18:52 [ТС] | 12 |
Но в примере выше сам массив не изменяется в 1 методе
Добавлено через 6 минут все понял,получаю ссылку,делаю дело с объектом,возвращаю данный объект... Сорри господа туплю сегодня
0
|
Master of Orion
|
|
03.08.2012, 20:17 | 13 |
Noob.net, конечно. Когда вы передаете ссылочное значение - вы передаете ссылку, по которой хранятся данные. С этими данными (элементы массива) вы можете делать что хотите, но с самой ссылкой вы не имеете права работать, поэтому в первом случае массив не меняется, а во втором - меняется. во-втором случае - конечно же получите новую копию, т.к. в данном случае вы получаете ссылку на новое значение, но которая видна снаружи (когда вы создаете внутри метода значение, оно видно только локально, return же позволяет этому локальному значению выйти за пределы метода и стать доступным остальному коду).
2
|
Темная сторона .Net
592 / 489 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
|
|
03.08.2012, 21:43 [ТС] | 14 |
0
|
03.08.2012, 21:43 | |
03.08.2012, 21:43 | |
Помогаю со студенческими работами здесь
14
В чем разница между Dispatcher и Task, где что лучше использовать? в чем разница между void f(int &n) и void f(int &&n) Какие библиотеки OpenGL лучше использовать с VB.NET и в чем разница? Разница между void и private void Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |