C# 托管非托管代码
Posted
技术标签:
【中文标题】C# 托管非托管代码【英文标题】:C# Managed Unmanaged code 【发布时间】:2011-05-23 03:55:03 【问题描述】:我正在尝试理解与结构和类有关的托管/非托管代码。我有一个结构,它具有另一个结构的属性,但它的指针声明如下:
struct StateInfo
Bitboard board;
StateInfo* previous;
我正在将 C++ 项目转换为 C#。无论如何,这不起作用,因为 Bitboard 是一个类。我得到的错误是指针不能在托管类型上声明的事实。如果我从结构中取出 Bitboard,那很好。不过我需要它,所以我将 Bitboard 从一个类更改为一个结构,一切都很好。我不知道怎么了?有什么想法吗?
【问题讨论】:
【参考方案1】:您可能甚至不想要struct
。而是:
class StateInfo
Bitboard board;
StateInfo previous;
在 C# 中,struct
是一种值类型。例如,int
是 struct
。它们通常应该用于完全由它们的值描述的事物。
【讨论】:
【参考方案2】:我建议你阅读一下blittability。
Blittable 类型在托管和非托管代码中具有相同的二进制表示,如果您希望指针有意义,则需要以相同的方式表示它们。
【讨论】:
感谢您的回答。我会查看链接以供阅读。【参考方案3】:本质上,在c#中所有的对象都是自动的指针,不需要释放。
尝试阅读一些关于从 C++ 迁移到 C# 的过渡性文章 C++ -> C#: What You Need to Know to Move from C++ to C#
【讨论】:
如果您阅读那篇文章就会注意到,没有“C#.NET”之类的东西。该语言被命名为“C#”。我还要提醒读者这篇文章已有十年历史了。这两种语言在过去十年中都有所发展。以上是关于C# 托管非托管代码的主要内容,如果未能解决你的问题,请参考以下文章