我有一堂课
class ABC
{
public int a = 2;
public void valueA(ABC objabc)
{
a = 5;
objabc = new ABC();
objabc.a = 11;
}
}
然后我写主要为
static void Main(string[] args)
{
ABC objabc = new ABC();
objabc.a = 15;
objabc.valueA(objabc);
Console.WriteLine(objabc.a);
}
当我执行此命令时,我在output.so中发现5?所以我的问题是为什么a = 5 ??为什么不是2、11或15?
最佳答案
您正在对象valueA
上调用objabc
方法。在方法内部,a
的成员this
设置为5。您可以看到与以下代码等效的代码:
class ABC
{
public int a = 2;
public void valueA(ABC objabc)
{
this.a = 5;
objabc = new ABC();
objabc.a = 11;
}
}
因此,您要将在其上调用该方法的对象的成员设置为5。此对象是
objabc
中的main
,因此最终值为5。差异,因为您没有通过引用传递它,所以更改在外部不可见。如果您的代码是这样,结果将是不同的(即11):
class ABC
{
public int a = 2;
public void valueA(ref ABC objabc)
{
a = 5;
objabc = new ABC();
objabc.a = 11;
}
}
在这种情况下,参数将通过引用传递,因此调用代码对分配
objabc = new ABC();
可见(即在Main
中)。