我上课了
class ABC
{
public int a = 2;
public void valueA(ABC objabc)
{
a = 5;
objabc = new ABC();
objabc.a = 11;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我写主要作为
static void Main(string[] args)
{
ABC objabc = new ABC();
objabc.a = 15;
objabc.valueA(objabc);
Console.WriteLine(objabc.a);
}
Run Code Online (Sandbox Code Playgroud)
当我执行这个我在输出中找到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;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您要将调用该方法的对象的成员设置为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;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,参数将通过引用传递,因此赋值objabc = new ABC();对于调用代码是可见的(即in Main).
| 归档时间: |
|
| 查看次数: |
1298 次 |
| 最近记录: |