Считайте этот вопрос сегодня о безопасном и небезопасном коде, который я затем прочитал об этом в MSDN, но я все еще не понимаю это. Почему Вы хотели бы использовать указатели в C#? Это просто для скорости?
Есть три причины использовать небезопасный код:
Иногда вам понадобятся указатели для взаимодействия вашего C # с базовой операционной системой или другим собственным кодом. Вам настоятельно не рекомендуется делать это, так как это «небезопасно» (натч).
Бывают очень редкие случаи, когда ваша производительность настолько ограничена процессором, что вам понадобится этот крохотный дополнительный бит производительности. Я бы порекомендовал написать эти части, связанные с процессором, в отдельном модуле на ассемблере или C / C ++, экспортировать API и заставить ваш код .NET вызывать этот API. Возможным дополнительным преимуществом является то, что вы можете поместить код конкретной платформы в неуправляемый модуль и оставить платформу .NET независимой.
Я склонен избегать этого, но есть некоторые случаи, когда это очень полезно:
Для примера последнего, я поддерживаю некоторый код сериализации. Запись float
в поток без необходимости использовать BitConverter. GetBytes
(который каждый раз создает массив) болезненно - но я могу схитрить:
float f = ...;
int i = *(int*)&f;
Теперь я могу использовать shift (>>
) и т.д. для записи i
гораздо проще, чем f
(байты будут идентичны тем, что я бы вызвал BitConverter.GetBytes
, плюс я теперь контролирую конечность тем, как я выбираю использование shift).