我有一段时间写的功能(对于.NET 3.5),现在我已升级到4.0
我无法让它发挥作用.
功能是:
public static class MemoryAddress
{
public static string Get(object a)
{
GCHandle handle = GCHandle.Alloc(a, GCHandleType.Pinned);
IntPtr pointer = GCHandle.ToIntPtr(handle);
handle.Free();
return "0x" + pointer.ToString("X");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我调用它时 - MemoryAddress.Get(新车("蓝色"))
public class Car
{
public string Color;
public Car(string color)
{
Color = color;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
对象包含非原始或非blittable数据.
为什么它不再起作用了?
我现在如何获取托管对象的内存地址?
我有:
结构
struct Data { int a; int b; }
Run Code Online (Sandbox Code Playgroud)
包含结构的类
class Packet {
Data DataStruct;
}
Run Code Online (Sandbox Code Playgroud)
当我现在实例化我的类时,我假设结构存在于堆上.如果我现在做的事情
SomeClass.Process(new Packet().DataStruct);
SomeClass.Process(new Packet().DataStruct.a);
Run Code Online (Sandbox Code Playgroud)
它会作为价值传递吗?
如果没有,是否有任何理由不将结构化为类?