Редко unsafe используют - потому что нахрен он нужен в языке, который принципиально улучшен как раз тем что код полностью managled.
Уж всяко не в вашем примере, а ради задач посерьезнее стоит заморачиваться с unsafe.
А прямая работа с указателями исключена - потому что как раз именно
с указателями в С++ случается чуть ли не больше всего ошибок у программистов.
Плюс хуже работает сборщик мусора, когда вы используете указатели.
Считаете себя крутым и пишущим без ошибок (хотя это и не так, 100% не так) и вам не нравятся ограничения C# - ну и не пишите на C#, в чем проблем-то?
Но возмущаться что в одном языке одна идеология, а в другом другая - как то странно.
Зачем бы были нужны языки с одинаковой идеологией.
Они очень разные.
С# и C++ только по синтаксису сходны.
Не нужно чисто механически привносить в один язык подход из другого языка.
Т.е. есть ситуация - у меня есть класс с 150 переменными (int), я хочу непосредственно эти переменные менять, передавая её в другой класс
Вероятность схлопотать
сторонние эффекты очень велика.
Класс это ведь не просто одна переменная как правило.
Если вы эту переменную инкрементируйте, состояние всего класса как то может сильно поменяться.
Если вы меняете напрямую, не давая классу это проконтроллировать - непонятно к чему это может привести.
НО мне что, 150 функций
А их и не должно быть у вас 150.
См. антипаттерн - класс Бог.