我正在尝试理解托管/非托管代码,因为它与结构和类有关。我有一个结构与另一个结构的属性,但它的指针声明如:
struct StateInfo
{
Bitboard board;
StateInfo* previous;
}
我正在将C ++项目转换为C#。无论如何,这不起作用,因为Bitboard是一个类。我得到的错误是指针无法在托管类型上声明的事实。如果我从结构中取出Bitboard,那很好。我需要它,所以我将Bitboard从一个类改为一个struct,一切都很好。我不确定是什么?有什么想法吗?
答案 0 :(得分:2)
您可能甚至不想要struct
。代替:
class StateInfo
{
Bitboard board;
StateInfo previous;
}
在C#中,struct
是值类型。例如,int
是struct
。它们通常应该用于完全由它们的价值描述的东西。
答案 1 :(得分:0)
基本上,在c#中,所有对象都自动成为指针,不需要释放。
尝试阅读一些关于从C ++迁移到C#的过渡性文章 C++ -> C#: What You Need to Know to Move from C++ to C#
答案 2 :(得分:0)
我建议您阅读blittability。
Blittable类型在托管代码和非托管代码中具有相同的二进制表示,如果希望指针有意义,则需要以相同的方式表示它们。