Существует разница между неуправляемыми и неуправляемыми указателями.
Управляемый указатель является дескриптором объекта в управляемой куче, и AFAIK имеет виддоступно только в управляемом C ++.Это эквивалентно C # ссылке на объект.Неуправляемый указатель, с другой стороны, эквивалентен традиционному указателю в стиле C, то есть адресу ячейки памяти;Для этого C # предоставляет унарный оператор &
, ключевое слово fixed
и контекст unsafe
.
Вы пытаетесь получить указатель на управляемое поле (dynamic
на самом деле System.Object
маскирует),в то время как C # допускает указатели только на неуправляемые объекты, отсюда и формулировка: ваш тип неуправляемый.
Немного подробнее об этом здесь .
Обновление:, чтобы сделать это более понятным, управляемый C ++ поддерживает классические указатели в стиле C и ссылки .Но для сохранения согласованности терминологии C ++ они называются неуправляемыми и управляемыми указателями соответственно.C # также поддерживает указатели (явно в контексте unsafe
) и ссылки (неявно, когда задействованы объекты ссылочных типов), но последние не называются «управляемыми указателями», они просто ссылки.
Подводя итог: в C ++ есть неуправляемые и управляемые указатели, в C # - неуправляемые указатели и ссылки.
Надеюсь, теперь это имеет смысл.