C# 是否有可能获得参考';s值多少?
对象是“按值传递”(而不是像某些人认为的“按引用传递”),其中值是引用。完全出于好奇,有可能得到这个参考的价值吗?我假设这个值是某种虚拟地址 例如,是否可以获取C# 是否有可能获得参考';s值多少?,c#,C#,对象是“按值传递”(而不是像某些人认为的“按引用传递”),其中值是引用。完全出于好奇,有可能得到这个参考的价值吗?我假设这个值是某种虚拟地址 例如,是否可以获取someInstance的参考值 public class Program { public static void Main() { SomeClass someInstance = new SomeClass(); SomeMe
someInstance
的参考值
public class Program
{
public static void Main()
{
SomeClass someInstance = new SomeClass();
SomeMethod(someInstance);
}
static void SomeMethod(SomeClass input) {
//...
}
}
NET中的对象没有固定地址,因为GC可以移动它们。如果你想得到那个地址,你需要告诉GC把它钉在上面。请看一看 您需要在“不安全”模式下使用compile(VS Project->Properties->Build并选中“允许不安全代码”) 输出:
'a' pointer value: 1
'a' pointer address: 000000001cb6dfa8
'point' value: 00000000027dd788
'point' address: 000007fe8a0851a8
'point.Y' value: 20
'point.X' value: 10
可能是一些不安全的东西,但通常你不需要。你说的“得到”是什么意思?您正在寻找某种类型的指针吗?您可以使用
unsafe
获取指向某些(基本)类型的指针,但它不适用于复杂类型。此外,不能保证.NET实例的物理内存位置随时间固定-对象可能会四处移动。即使你获取了一个对象的物理位置,只要它被固定(fixed
)就有效。我能想到的最接近的事情是,这与获取引用的值不同。从任何意义上说,你都没有显示出你试图解决的问题,因此,无法知道所提供的答案是否符合您的要求。
'a' pointer value: 1
'a' pointer address: 000000001cb6dfa8
'point' value: 00000000027dd788
'point' address: 000007fe8a0851a8
'point.Y' value: 20
'point.X' value: 10