c# - 将对象作为参数传递

标签 c#

应用程序正在打印 24 但它不应该打印 18 当我们知道没有 ref 关键字时只传递对象的副本而不对原始对象进行任何更改。 我创建了一个名为 myclass 的类和一个对象 me。 age 是 myclass 类中的公共(public)变量。 我已将 me.age 设置为 18,并通过显示方法将其更改为 24。

class Program
{        
    static void Main(string[] args)
    {
        myclass me = new myclass();
        me.age = 18;
        show(me);
        Console.WriteLine(me.age);
        Console.ReadLine();
    }

    public static void show( myclass you)
    {
        you.age = 24;        
    }
}

class myclass
{
    public int age;
}

最佳答案

不要混淆变量和变量指向的内容。

当你有:

MyClass myVar = new MyClass();
MyClass myVar2 = myVar;

这将只创建对象的单个实例,但有 2 个变量指向它。

同样的事情也发生在你的参数上:you 是变量 me 的副本,但两者都指向同一个对象。所以当你修改you.age时,你也在修改me.age

在你的函数中,如果你做了

you = new myClass();

只有这样,meyou 才会引用不同的对象。如果这样做,me 仍会指向原始对象。

如果您将ref 添加到参数you,那么如果您这样做了

you = new myClass();

然后变量 me 将更新为指向同一个对象。

对于对象,你需要把变量和变量指向的东西分开。

关于c# - 将对象作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725611/

相关文章:

c# - 在办公应用程序之间共享代码

c# - 如何使用 .net core c# 将消息从 Deadletter 主题发送到 Main 并完成它

c# - 以编程方式将 Windows 机器加入 AD 域

c# - 是否可以在Azure上远程运行流式 map 简化作业?

C# BeginInvoke 问题

c# - Thread.Sleep 会影响 ThreadPool 吗?

c# - 从更大的 TimeSpan 中减去不同年份的 TimeSpan

c# - VS 强制抛出异常

c# - 将数据绑定(bind)到 Windows Phone 中的可观察集合

c# - 如何在 C# VSTO 添加中配置 PowerPoint 中音频对象的播放设置