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

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

18.09.2012, 18:37. Показов 11488. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru