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