🚀 C# 15 меняет подход к `unsafe`: указатели больше не означают автоматически опасный код
Раньше в C# сам факт использования указателя требовал:
unsafe
{
int* ptr;
}
Теперь язык движется к более точной модели:
опасным считается не наличие указателя, а операция, которая реально работает с unmanaged-памятью.
В preview-версии C# 15 уже не требуют unsafe:
✅ объявление pointer-типа
✅ получение адреса через &
✅ fixed для закрепления памяти
✅ преобразование stackalloc в указатель
✅ sizeof для unmanaged-типов
Пример:
int number = 42;
int* pointer = &number;
int[] numbers = [10, 20, 30];
fixed (int* first = numbers)
{
// само закрепление памяти безопасно
}
Но вот это всё ещё требует unsafe:
*pointer; // dereference
pointer->Value; // доступ через указатель
pointer[0]; // работа с элементами
delegate* // вызов function pointer
Главная идея:
**создать инструмент можно безопасно.
Опасно — когда начинаешь напрямую менять память.**
Это первый этап большой переработки модели безопасности C#.
Дальше ожидаются:
- requires-unsafe для отдельных членов;
- opt-in на уровне assembly;
- новый safe keyword.
C# постепенно делает unsafe-код более точечным: меньше блоков вокруг всего файла, больше внимания к реально опасным операциям.
#csharp #dotnet #programming
Раньше в C# сам факт использования указателя требовал:
unsafe
{
int* ptr;
}
Теперь язык движется к более точной модели:
опасным считается не наличие указателя, а операция, которая реально работает с unmanaged-памятью.
В preview-версии C# 15 уже не требуют unsafe:
✅ объявление pointer-типа
✅ получение адреса через &
✅ fixed для закрепления памяти
✅ преобразование stackalloc в указатель
✅ sizeof для unmanaged-типов
Пример:
int number = 42;
int* pointer = &number;
int[] numbers = [10, 20, 30];
fixed (int* first = numbers)
{
// само закрепление памяти безопасно
}
Но вот это всё ещё требует unsafe:
*pointer; // dereference
pointer->Value; // доступ через указатель
pointer[0]; // работа с элементами
delegate* // вызов function pointer
Главная идея:
**создать инструмент можно безопасно.
Опасно — когда начинаешь напрямую менять память.**
Это первый этап большой переработки модели безопасности C#.
Дальше ожидаются:
- requires-unsafe для отдельных членов;
- opt-in на уровне assembly;
- новый safe keyword.
C# постепенно делает unsafe-код более точечным: меньше блоков вокруг всего файла, больше внимания к реально опасным операциям.
#csharp #dotnet #programming