应用程序正在打印 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();
只有这样,me
和you
才会引用不同的对象。如果这样做,me
仍会指向原始对象。
如果您将ref
添加到参数you
,那么如果您这样做了
you = new myClass();
然后变量 me
将更新为指向同一个对象。
对于对象,你需要把变量和变量指向的东西分开。
关于c# - 将对象作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16725611/