为什么类成员变量的值会发生变化?

Usm*_*man 3 c# class

我上课了

    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?

Tud*_*dor 5

您正在调用valueA该对象上的方法objabc.在方法成员athis设置为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).