>Смысл в следующем - если инструмент опасен, то его нужно заменить на
>аналогичный, но безопасный.Все, кто так говорят, обычно забывают, что повышение безопасности всегда достигается за счет ограничения возможностей. Тому, кто пишет на дотнете "Hello world", это, конечно, не помешает, но существует программирование и за пределами дотнета. Я использую указатели не потому, что они мне так нравятся, а потому, что они - единственная возможность запихать программу на языке высокого уровня в мобильное устройство с 8 Кб ПЗУ и 1 Кб ОЗУ. Сможете ли вы впихнуть в такое устройство программу на "безопасном" языке?
>Ещё раз. В managed языках указатели никуда не делись, просто у вас отобрали адресную арифметику и взамен дали безопасные типы. Был char*, стал string, был T[], стал vector<T> или List<T> или T[], был void*/char* - стал byte[]. Вам нужно передать указатель, так передаёте соотв. ссылочный тип (object). Необходимо передавать значение - передаёте сущности соотв. типа (struct). Просто в случае interop-а компилятор с помощью ваших подсказок догадается как корректно передать соотв. тип дальше и что с ним делать.
Заменяя эти типы на "безопасные", вы лишаете их части функциональности. Например, char * - это не только строка. С помощью такого указателя вы можете, например, получить доступ к отдельным байтам блока двоичных данных, быстро извлечь битовые значения и т.п. В Питоне сделать это исключительно средствами языка, не прибегая к библиотечным функциям, просто невозможно.