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

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

@GameDevelopmentUA
Number of subscribers: 632
Photos: 275
Videos: 105
Links: 520
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