Библиотека шарписта | C#, F#, .NET, ASP.NET: post #7237 — TG.ME

💡 Скрытые копии структур. Зачем нужны readonly struct и in

Структуры передаются по значению — это знают все. Но копия может появиться и там, где её совсем не ожидаешь.
Представьте структуру с обычным, не readonly, методом. Если она находится в readonly-контексте, например в readonly поле или приходит через in, компилятору приходится защищать значение от изменения. При вызове такого метода он может создать защитную копию структуры.

➡️ Для большой структуры в горячем цикле это уже лишняя работа. Решение — явно обозначить неизменяемость:


public readonly struct Point
{
public int X { get; }
public int Y { get; }

public int Sum() => X + Y;
}


Можно пометить readonly и отдельные методы или свойства, если всю структуру сделать неизменяемой нельзя.
in при этом позволяет передавать большую структуру по ссылке без обычного копирования, а readonly-члены помогают избежать защитных копий при работе с такой ссылкой.

Если структура концептуально неизменяемая, readonly struct — хороший выбор по умолчанию. А для больших структур in может снизить стоимость передачи, но его эффект зависит от конкретного сценария
✅


📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека шарписта

#il_люминатор
❤4🔥2👍1
August 19, 2026 3.5K 15