Search code examples
c#classreference-type

difference between class parameter in function


I wrote this code in visual studio.

public class Class1
 {
    public string MySTR;
 }


private static void func1(Class1 class )
 {
  class = new Class1();
  class.MySTR = "B";
 }

private static void func2(Class1 class )
{
  class.MySTR = "C";
}

static void Main(string[] args) 
{       
  Class1 class = new Class1();
  class.MySTR = "A";
  func1(class);
  Console.WriteLine(class.MySTR);
  func2(ref class);
  Console.WriteLine(class.MySTR);
}

I expected to get AA but I got AC.

What the difference between these methods?

Thank you.


Solution

  • Why you expect to get "AA"? "AC" is correct output. Check comments in following code blocks (codes has been modified slightly to make it compile and run) :

    private static void func1(Class1 class1)
    {
        //create new instance of Class1
        class1 = new Class1();
        //modify the new instance. 
        //Original instance passed to method parameter remain untouched
        //Hence you still got "A" from 1st Console.WriteLine(class1.MySTR);
        class1.MySTR = "B";
    }
    
    private static void func2(Class1 class1)
    {
        //modify Class1 instance passed to method parameter. 
        //It's MySTR member value becomes "C" after this
        //Hence you got "C" from 2nd Console.WriteLine(class1.MySTR);
        class1.MySTR = "C";
    }
    
    static void Main(string[] args)
    {
        Class1 class1 = new Class1();
        class1.MySTR = "A";
        func1(class1);
        Console.WriteLine(class1.MySTR);
        func2(class1);
        Console.WriteLine(class1.MySTR);
    }