Лично мне никогда не приходилось использовать указатель в C #. Если мне нужна такая функциональность, я пишу этот код на C ++ / CLI и вызываю его из C #. Если мне нужно передать указатели из C # в C ++ / CLI или наоборот, я передам их как IntPtr и приведу к нужному типу в C ++ / CLI.
По моему мнению - если вы используете указатели в C #, в 99% случаев вы используете неправильный язык.
Edit:
Приятной особенностью C ++ / CLI является то, что вы можете пометить отдельные классы для компиляции только на нативном уровне. Я много работаю с изображениями, что должно произойти очень быстро; он использует много кода на основе указателей. У меня обычно есть управляемый объект C ++ / CLI, пересылающий вызовы к собственному объекту C ++, где происходит моя обработка. Я включаю оптимизацию для этого нативного кода и альта, и получаю хороший прирост производительности.
Конечно, это имеет значение только в том случае, если прирост производительности, который вы получаете, выполняя собственный оптимизированный код, может компенсировать издержки от управляемых переходов к неуправляемым. В моем случае это всегда так.