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.
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);
}