小编lej*_*jon的帖子

C#中对象的内存地址

我有一段时间写的功能(对于.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数据.

为什么它不再起作用了?

我现在如何获取托管对象的内存地址?

.net c#

66
推荐指数
6
解决办法
8万
查看次数

类中的结构是否作为值传递?

我有:

结构

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)

它会作为价值传递吗?

如果没有,是否有任何理由不将结构化为类?

.net c#

5
推荐指数
1
解决办法
538
查看次数

标签 统计

.net ×2

c# ×2