Hay una diferencia entre punteros no gestionados y no gestionados.
A gestionados puntero es un identificador de un objeto en el montón administrado, y AFAIK está disponible en manejado C++ solamente. Es equivalente a C# referencia a un objeto. El puntero no administrado, por otro lado, es equivalente a un puntero de estilo C tradicional, es decir, la dirección de una ubicación de memoria; C# proporciona el operador &
único, la palabra clave fixed
y el contexto unsafe
para eso.
Usted está tratando de obtener un puntero a un campo administrado (dynamic
es en realidad System.Object
es disfrazado), mientras que C# permite punteros a objetos no administrados solamente, por lo tanto, la redacción: el tipo no es administrado.
Un poco más en este here.
Actualización: para que sea más clara, logró C++ soporta clásica de estilo C punteros y referencias . Pero para mantener la terminología de C++ consistente, se llaman no administrados y administradospunteros, correspondientemente. C# también admite punteros (explícitamente en el contexto unsafe
) y referencias (implícitamente cuando se trata de objetos de tipos de referencia), pero el último es no llamados "punteros administrados", son solo referencias.
En resumen: en C++ hay punteros administrados y no gestionados, en C# - punteros no administrados y referencias.
Espero que tenga sentido ahora.
Claramente, un tipo no no administrado no es un tipo no no administrado. Mmmm. –
No lea demasiado en un mensaje de error torpe. La carpeta C# simplemente no admite punteros. –
No hay diferencia. La redacción se debe simplemente al comportamiento esperado. "Los punteros son para tipo no administrado. Este no es uno de esos. No es un tipo no administrado". El error no es que los campos se administren, es que los campos * no están no administrados *, a pesar de que esas dos frases significan lo mismo. –