Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Devlog без QA | Розробка ігор
Added 06 Dec 2025 🌐 UK

Devlog без QA | Розробка ігор

@GameDevelopmentUA
Number of subscribers: 624
Photos: 287
Videos: 108
Links: 536
Description:
Unity/Новини/Ідеї/Натхнення й інший якісний (а можливо і не дуже) контент тут! Зв’язок: @DevAndrew Анти-скам бот: @IndieSafeBot
Source

Devlog без QA | Розробка ігор | Коротко, а може і не дуже, про refКлючове слово ref використовується д...

Telegram community logo - Devlog без QA | Розробка ігор Devlog без QA | Розробка ігор @GameDevelopmentUA
419 Views/Reach 2026-01-30 18:06 Message №516
📱 Коротко, а може і не дуже, про ref

Ключове слово ref використовується для передачі параметрів за посиланням і створення посилальних змінних. За замовчуванням параметри передаються за значенням, а значення повертаються за значенням. Додавання ref у сигнатурі методу та при його виклику змінює поведінку на передачу за посиланням.Наприклад: public void Increment(ref int x) { x += 1; // Змінює початкову змінну виклику}int a = 5;Increment(ref a); // a стає 6
Тут і визначення методу, і виклик використовують ref. Виклик має використовувати той самий модифікатор, що й у сигнатурі, і до змінної-аргумента необхідно застосувати ref.Для чого це потрібно?1️⃣ Щоб змінювати значення аргументу напряму

Все просто. Це потрібно, щоб метод працював напряму з оригінальною змінною, а не з її копією. Тобто ти передаєш у метод не “значення”, а “саму змінну”.2️⃣ Щоб уникати копіювання великих структур struct передаються за значенням, тобто копіюються. Для великих структур це дорого.void Update(ref BigStruct data) { }
3️⃣ Для оптимізації hot-path коду

У місцях, де код виконується дуже часто (рендер, фізика, математика):• ref зменшує кількість копій;• зменшує тиск на GC (опосередковано);• дає більш передбачувану роботу з памʼяттю. Саме тому ref активно використовується в Span<T>, ReadOnlySpan<T> та низькорівневому . NET коді👀 Нюанси:Ініціалізація перед викликом. Перед викликом Foo(ref x) змінна x уже повинна містити деяке значення.Необхідність явного ref. І в сигнатурі методу, і при його виклику має бути ключове слово ref.Взаємодія з іншими модифікаторами. ref сумісний з readonly для полів (в ref-структурі). До методів з async або yield застосовувати ref не можна, оскільки їхня поведінка не гарантує безпечності посилань.ℹ️ Джерела: [База] / [readonly/async]✈️ Gamedev | #уроки #посилання #ref #async #csharp