2026-05-22 csharpdotnetdotnet-11 C# 16 превращает unsafe в контракт для вызывающего кода C# 16 переосмысливает ключевое слово unsafe так, что оно передаёт обязательство вызывающему коду, а не молча открывает unsafe-контекст, и теперь внутренние блоки unsafe обязательны.