c# - 在c#中通过引用传递参数时跟踪地址

标签 c# .net reference

当通过引用调用对象时,什么会被压入堆栈?考虑这段代码:

using System;
class em
{
   public int i=0;
}
class program
{
    public void method(int a, ref int b, em c, ref em d)
    {
         //implementation
    }
    static public void Main()
    {
         int i;
         int j;
         em e1 = new em();
         em e2 = new em();
         i=9;
         j=10;
         Program p=new Program();
         p.method(i,ref j,e1,ref e2);
    }
}

当传递 e1 时,对象的引用作为参数传递,但是 在此代码中,当 e2 通过引用传递时,什么被压入堆栈,即什么作为参数传递给方法?以及使用 ref 返回同一对象时传递的内容。

最佳答案

类是引用类型,当您将实例作为参数传递时,将复制对象的指针(引用)。但是当你使用 ref 关键字时,指针本身被传递并且任何更改都直接在原始引用上完成。请看下面的代码:

class program
{
    static public void method(int a, ref int b, em c, ref em d)
    {
        c = null; // c is copy of e1
        d = null; // d is e2
    }
    static public void Main()
    {
        int i;
        int j;
        em e1 = new em(); // e1 is pointer to 'new em()' location at memory
        em e2 = new em(); // e2 is pointer to 'new em()' location at memory
        i = 9;
        j = 10;
        method(i, ref j, e1, ref e2);
        // e1 is intact
        // e2 is null
    }
}

关于c# - 在c#中通过引用传递参数时跟踪地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642128/

相关文章:

c# - MongoDB:具有重写 ID 和属性的子类出现问题

c# - 列表框中的扩展器在折叠时留下空白

c# - asp.net无法获取输入文本的文本

c# - 如何从 C# 调用 Win32API SetCommTimeouts?

java - 为什么instanceof不像听起来那样工作?

c# - 将外部程序集添加到 ASP.NET MVC 项目的常用方法是什么?

c# - 使用 RavenDB 持久性插件连接 JOliver 的 EventStore

c# - 带有 FileSystemWatcher 和 Timer 的 Windows 服务 - 确保所有内容都得到处理

.net - 在字节模式和异步中重用 NamedPipeServerStream 的正确方法

C#:非静态字段、方法或属性需要对象引用