为什么非托管结构不能成为托管类的成员?

seb*_*ebf 14 interop unmanaged c++-cli

我知道在C++/CLI中,在定义托管类时不能使用非托管类型:

public struct Unmanaged
{
    int x;
    int y;
};

public ref class Managed
{
    int one;
    Unmanaged two;  //error C4368
};
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.Unmanaged它只是一个本机类型的集合 - 它的大小是已知的,当然它(我的意思是定义它的内存块)将被Managed"托管堆"内部的" 内存块"移动,并且元数据中存储的任何偏移都将保持有效,不是吗?就像声明了整数或浮点数一样?

为什么我们不能混合类型?

Ton*_*son 16

混合类型实际上是指混合内存模型.非托管类型进入堆,托管类型进入垃圾收集堆,因此当您在托管中嵌入非托管类型时,它将需要两个堆上的内存,这就是您使用指针执行此类操作的原因.指针是受管理的,它指向的值不是.

我自己很好奇,所以我收集了谷歌并找到了这个.

http://blogs.msdn.com/b/branbray/archive/2005/07/20/441099.aspx

盖伊似乎知道他在说什么.

好问题虽然......