Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/57: Рейтинг темы: голосов - 57, средняя оценка - 4.77
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1

Когда нужно использовать ссылку с out, а когда с ref

18.09.2012, 18:37. Показов 11428. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не давно начал учить С# но не могу понять когда надо использовать оut или ref , я так понимаю что это ссылки как в С++. Единственно в чем я заметил разницу между оut и ref что если передавать в ref то переменная должна быть инициализирована и все может вы мне подскажите.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.09.2012, 18:37
Ответы с готовыми решениями:

Когда нужно использовать структуры, когда классы, а когда словарь?
Хеллоу. Не могу понять, когда, что, нужно использовать. Допустим мне нужно получить объект, который имеет список объектов. И...

(MCS-51) Когда нужно использовать команду add а когда addc при суммировании?
когда нужно использовать команду add а когда addc при суммировании? ;(A)=C3H, (R6)=AAH ADD A,R6 ;(A)=6DH, (R6)=AAH ...

Когда нужно использовать &ссылки ,а когда *указатели?
Желательно с примерами

12
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.09.2012, 20:38
Out или ref нужно использовать тогда, когда в методе нужно изменить саму ссылку.
А вот когда нужно менять ссылку в методе - это уже зависит от вашей задачи. Если не знаете куда в вашем коде их вставить, то и не нужно их использовать - пусть лежат где лежали.

Цитата Сообщение от Sylar9 Посмотреть сообщение
Единственно в чем я заметил разницу между оut и ref что если передавать в ref то переменная должна быть инициализирована
Любая переменная должна быть инициализирована до первого использования.
Разница между ref и out в том, что переменную, переданную через out вы обязаны проиницализировать в методе, куда она передается.
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
18.09.2012, 20:52
И еще через out можно передавать неинициализированные переменные.
Например
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
 
class Program
{
        static void Main()
        {
                int x;
                foo(ref x);
        }
 
        static void foo(ref int x)
        {
                x = 1;
        }
}
Такое не компилируется. Но если заменить ref на out, то скомпилируется.

UPD:
Единственно в чем я заметил разницу между оut и ref что если передавать в ref то переменная должна быть инициализирована и все
Опять не дочитал пост до конца...(
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.09.2012, 20:56
Цитата Сообщение от diagon Посмотреть сообщение
И еще через out можно передавать неинициализированные переменные.
Это уже следствие. А причина - обязанность инициализировать эту переменную в методе.
Потому, собственно, и можно передавать ее неинициализированной - out является гарантом ее инициализации.
0
51 / 38 / 5
Регистрация: 14.01.2012
Сообщений: 127
18.09.2012, 21:35
out используется когда нужно изменить значение нессылочной переменной, но её значение в методе не используется. Например просто получить результат на выходе. Конечно с помощью ref можно сделать то же, но с out в этом случае какбэ прозрачнее. Ну и про инициализацию выше верно.
0
139 / 60 / 13
Регистрация: 04.09.2011
Сообщений: 1,956
Записей в блоге: 1
19.09.2012, 08:41  [ТС]
Цитата Сообщение от nrv Посмотреть сообщение
out используется когда нужно изменить значение нессылочной переменной, но её значение в методе не используется. Например просто получить результат на выходе. Конечно с помощью ref можно сделать то же, но с out в этом случае какбэ прозрачнее. Ну и про инициализацию выше верно.
изменить значение нессылочной переменной это как ?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
19.09.2012, 09:02
Цитата Сообщение от Sylar9 Посмотреть сообщение
изменить значение нессылочной переменной это как ?
Вы представляете себе, что такое переменная?
C#
1
2
int i;
i = 4; //вот тут мы поменяли значение переменной i
int - value-тип, поэтому мы поменяли тут значение нессылочной переменной.
0
0 / 0 / 0
Регистрация: 19.09.2012
Сообщений: 13
19.09.2012, 15:34
Цитата Сообщение от Sylar9 Посмотреть сообщение
Не давно начал учить С# но не могу понять когда надо использовать оut или ref
При передачи переменной из параметром ref ты передаеш ссилку на эту переменную, соответствено все изменения проведённые над переменной будут отображатся в самой переменной:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MyClass
{
int a = 9;
 
void main()
{
ChangeA(ref a);
 
int d = a;// Значение переменной а будет 10;
}
 
static void ChangeA(ref int data)
{
data ++;
} 
}
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 9
11.06.2014, 15:15
Цитата Сообщение от Sylar9 Посмотреть сообщение
Не давно начал учить С# но не могу понять когда надо использовать оut или ref , я так понимаю что это ссылки как в С++. Единственно в чем я заметил разницу между оut и ref что если передавать в ref то переменная должна быть инициализирована и все может вы мне подскажите.
В принципе по большому счету так и есть. out позволяет передавать ссылку на объект, переменную, которая не была инициализирована. Единственное в этом случае её необходимо инициализировать внутри метода, в который эта ссылка передается перед использованием.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
11.06.2014, 15:20
Цитата Сообщение от CatMan Посмотреть сообщение
out позволяет передавать ссылку на объект
ref тоже
0
0 / 0 / 0
Регистрация: 18.09.2013
Сообщений: 9
11.06.2014, 16:14
Цитата Сообщение от Metall_Version Посмотреть сообщение
out позволяет передавать ссылку на объект
ref тоже
Да нет же, если переменная не проинициализирована до передачи в метод, через ref не получится передать, а out допускает инициализацию внутри принимающего ссылку метода.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
11.06.2014, 16:25
Цитата Сообщение от CatMan Посмотреть сообщение
out допускает инициализацию
Не допускает, а обязывает присвоение значения.
0
 Аватар для Metall_Version
2152 / 1289 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
11.06.2014, 16:41
Лучший ответ Сообщение было отмечено Metall_Version как решение

Решение

Цитата Сообщение от CatMan Посмотреть сообщение
Да нет же, если переменная не проинициализирована до передачи в метод, через ref не получится передать, а out допускает инициализацию внутри принимающего ссылку метода.
что нет же, оба способа передают значение по ссылке , с той лишь разницей:

out , как видно из названия, предназначена только на возвращение результата, соответственно, мы в методе обязаны проинициализировать этот параметр. ( инициализированная или нет перемена под модификатором out поступает или нет, не важно. мы значение в метод таким параметром передать не можем. только получить)

а ref в свою очередь имеет дуплексную связь. Но значение обязано быть проинициализировано до передачи в метод. И в методе возможно с помощью этого модификатора как принять значение так и/или передать .
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2014, 16:41
Помогаю со студенческими работами здесь

Когда возникает необходимость использовать модификаторы out и ref
Объясните пожалуйста, когда возникает необходимость использовать эти модификаторы? Когда вообще может понадобиться передача аргументов по...

Когда стоит использовать класс, а когда лучше обойтись без них?
Когда стоит использовать класс, а когда лучше обойтись без них? Когда следует использовать несколько классов? Вот, например. Программа...

Когда использовать модификатор для перемнной Volatile, а когда synchronized?
Я примерно знаю, для чего они - хотя в книге этому было посвящено немного времени(пришлось искать самостоятельно), но хотелось бы выслушать...

Когда надо использовать списки инициализации, а когда можно заменить их констуктором по умолчанию?
1)Любезные,скажите когда надо исп. списки инициализации, а когда можно заменить констуктором по умолчанию? 2) правильно ли...

1c8 когда лучше использовать запрос, а когда выбор
Хочется в целях повышения образованности уточнить такой момент - когда в восьмерке лучше использовать прямой запрос, а когда выборку...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru