C# передаёт параметры по значению — метод получает копию, оригинал не меняется. Иногда это не то, что нужно.
ref — вы даёте, метод меняет, вы получаете обратно
Переменная должна быть инициализирована до вызова. Метод может изменить её — а может и не изменить, это не обязательно:
void Add(ref int total, int value) => total += value;
int sum = 0;
Add(ref sum, 5); // sum == 5
Add(ref sum, 3); // sum == 8
out — метод обязан заполнить
Переменную инициализировать не нужно. Но компилятор требует, чтобы метод присвоил значение до возврата, иначе ошибка компиляции. Именно поэтому весь паттерн Try* в стандартной библиотеке построен на out.
bool TryParse(string s, out int result)
in — только читать, не трогать
Передаёт по ссылке — без копирования. Но запрещает запись. Нужен исключительно для производительности с большими структурами. С классами смысла нет — они и так передаются по ссылке.
float Dot(in Vector3 a, in Vector3 b) => ...
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view