C#托管非托管代码

时间:2011-05-23 03:55:04

标签: c# unmanaged managed

我正在尝试理解托管/非托管代码,因为它与结构和类有关。我有一个结构与另一个结构的属性,但它的指针声明如:

struct StateInfo
{
   Bitboard board;
   StateInfo* previous;
}

我正在将C ++项目转换为C#。无论如何,这不起作用,因为Bitboard是一个类。我得到的错误是指针无法在托管类型上声明的事实。如果我从结构中取出Bitboard,那很好。我需要它,所以我将Bitboard从一个类改为一个struct,一切都很好。我不确定是什么?有什么想法吗?

3 个答案:

答案 0 :(得分:2)

您可能甚至不想要struct。代替:

class StateInfo
{
   Bitboard board;
   StateInfo previous;
}

在C#中,struct是值类型。例如,intstruct。它们通常应该用于完全由它们的价值描述的东西。

答案 1 :(得分:0)

基本上,在c#中,所有对象都自动成为指针,不需要释放。

尝试阅读一些关于从C ++迁移到C#的过渡性文章 C++ -> C#: What You Need to Know to Move from C++ to C#

答案 2 :(得分:0)

我建议您阅读blittability

Blittable类型在托管代码和非托管代码中具有相同的二进制表示,如果希望指针有意义,则需要以相同的方式表示它们。