Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有可能获得参考';s值多少?_C# - Fatal编程技术网

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