我有一段时间写的功能(对于.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数据.
为什么它不再起作用了?
我现在如何获取托管对象的内存地址?
好吧所以我想创建一个将改变数据类型值的泛型类.我想这样做的原因是我可以使用撤消和重做方法.我可以为我需要的每种值类型编写一个类.IE double,int ...但如果我可以创建一个通用类来做这件事会容易得多.
这就是我所拥有的
class CommandChangeDouble : Command
{
double _previous;
double _new;
double* _objectRef;
public unsafe CommandChangeDouble(double* o, double to)
{
_objectRef = o;
_previous = *o;
_new = to;
*_objectRef = _new;
}
public unsafe void Undo()
{
*_objectRef = _previous;
}
public unsafe void Redo()
{
*_objectRef = _new;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我要的
class CommandChangeValue<T> : Command
{
T _previous;
T _new;
T* _objectRef;
public unsafe CommandChangeValue(T* o, T to)
{
_objectRef = o;
_previous = *o;
_new …Run Code Online (Sandbox Code Playgroud)