Abe*_*bel 16 .net c# types unmanaged managed
当我为实验目的编写以下代码段时,它引发了悬停错误(请参见屏幕截图):
无法声明指向非非托管类型的'动态'
片段:
dynamic* pointerToDynamic = &fields;
Run Code Online (Sandbox Code Playgroud)
虽然代码显然是不允许的(你不能使用托管类型的地址),但它提出了一个问题:什么是非非托管类型,它与托管类型有什么不同?或者只是Visual Studio试图搞笑?

非托管和非托管指针之间存在差异.
托管指针是托管堆上对象的句柄,AFAIK仅在托管C++中可用.它等同于对象的C#引用.另一方面,非托管指针等同于传统的C风格指针,即内存位置的地址; C#为其提供一元运算&符,fixed关键字和unsafe上下文.
您正在尝试获取指向托管字段的指针(dynamic实际上System.Object是伪装),而C#仅允许指向非托管对象的指针,因此措辞:您的类型是非非托管的.
在这里再说一点.
更新:为了使其更清晰,托管C++支持经典的C风格指针和引用.但是为了保持C++术语的一致性,相应地将它们称为非托管和托管 指针.C#还支持指针(显式地在unsafe上下文中)和引用(隐含地涉及引用类型的对象),但后者不称为"托管指针",它们只是引用.
总结一下:在C++中,有非托管和托管指针,在C#中是非托管指针和引用.
希望现在有意义.