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

Возврат ссылочного типа или void?

05.09.2020, 13:30. Показов 2502. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, товарищи. Возможно сабж является вкусовщиной, но хотелось бы услышать ваше мнение.
Если параметром метода является ссылочный тип данных, к примеру массив, и он же является обрабатываемым объектом, то как по вашему мнению стОит оформить.

C#
1
2
3
MyMthod(someArray) //с void
    //или
someArray = MyMethod(someArray) //по сути возврат ссылки на него же самого
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2020, 13:30
Ответы с готовыми решениями:

System.Void из C# использоваться не может - для получения объекта типа void используйте typeof (void)
Изучаю с# по "Шилдт Г. - C# 4.0 полное руководство" При изучении конструктора возникла проблема: попытался запустить код на стр. 169, а...

Если возвращается переменная ссылочного типа, то возвращается объект или просто ссылка
Почему-то авторы всегда акцентируют внимание на передачу параметров в функцию, а на возврат не очень: using System; using...

Переменные ссылочного типа
Объясните, пожалуйста у переменной ссылочного типа помимо адреса на который она ссылается имеется собственный адрес или это одно и то же?

5
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
05.09.2020, 13:33
Gagarin23, CommandQuerySeparation
2
1 / 1 / 0
Регистрация: 09.05.2020
Сообщений: 60
05.09.2020, 14:02  [ТС]
Как я понял, моя тема о "Мутаторах", но так и не понял как их правильно помечать. Объясните дурочку на пальцах, если не трудо.
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
05.09.2020, 14:19
Лучший ответ Сообщение было отмечено Gagarin23 как решение

Решение

Gagarin23,
Если ваш метод меняет состояние объекта - используйте void. (Command)
Если ваш метод не меняет состояние объекта, а возвращает какой-то результат - используйте тип возвращаемого объекта (Query)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Query
int[] CreateArray(int length)
{
    return new int[length];
}
 
//Command
void SwapElements(int[] array, int firstIndex, int secondIndex)
{
    int firstElement = array[firstIndex];
    int secondElement = array[secondIndex];
 
    array[firstIndex] = secondElement;
    array[secondIndex] = firstElement;
}
2
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
05.09.2020, 15:31
Цитата Сообщение от Gagarin23 Посмотреть сообщение
Возможно сабж является вкусовщиной
И да, и нет. Зависит от конкретной задачи. Можно добавить еще вкусовщины
C#
1
void Foo(ref int[] arr)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
05.09.2020, 15:36
Лучший ответ Сообщение было отмечено Gagarin23 как решение

Решение

Цитата Сообщение от Gagarin23 Посмотреть сообщение
Как я понял, моя тема о "Мутаторах", но так и не понял как их правильно помечать. Объясните дурочку на пальцах, если не трудо.
Дополню ответ Cupko.
Если ваш метод изменяет состояние объекта он должен быть или void, или возвращать какие-то данные об изменении, но не сам изменённый объект.
Так же из названия метода должно быть ясно понятно, что он модифицирует полученный объект.

Допустим:
C#
1
2
3
4
5
6
7
8
9
10
//Command 
// Удаляет все элементы равные указанному значению
// Возвращает количество удалённых элементов
int RemoveAllElements(ICollection<T> collection, T value)
{
    int count = 0;
    while(collection.Remove(value))
      count++;
    return count;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2020, 15:36
Помогаю со студенческими работами здесь

Переменные ссылочного типа
Возник вопрос при присваивании переменных ссылочного типа. Пример кода public struct Person { public string Name; ...

Передача ссылочного типа по значению
Объясните static void Main(string args) { var s2 = new StringBuilder(); Foo(s2); ...

Переменные ссылочного типа и присваивание
Есть класс class cTest { //Множество методов и значений } также cTest DemoTest = new cTest()

Передача ссылочного типа по значению
Не совсем понимаю как работает этот код static void Main(string args) { Person fred = new...

Сравнение объектов ссылочного типа
Доброго времени суток, дамы и господа. Помогите, пожалуйста разобраться с кодом. using System; class C1 { public int A; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru