I was perplexed after executing this piece of code, where strings seems to behave as if they are value types. I am wondering whether the assignment operator is operating on values like equality operator for strings.
Here is the piece of code I did to test this behavior.
using System;
namespace RefTypeDelimma
{
class Program
{
static void Main(string[] args)
{
string a1, a2;
a1 = "ABC";
a2 = a1; //This should assign a1 reference to a2
a2 = "XYZ"; //I expect this should change the a1 value to "XYZ"
Console.WriteLine("a1:" + a1 + ", a2:" + a2);//Outputs a1:ABC, a2:XYZ
//Expected: a1:XYZ, a2:XYZ (as string being a ref type)
Proc(a2); //Altering values of ref types inside a procedure
//should reflect in the variable thats being passed into
Console.WriteLine("a1: " + a1 + ", a2: " + a2); //Outputs a1:ABC, a2:XYZ
//Expected: a1:NEW_VAL, a2:NEW_VAL (as string being a ref type)
}
static void Proc(string Val)
{
Val = "NEW_VAL";
}
}
}
In the above code if I use a custom classes instead of strings, I am getting the expected behavior. I doubt is this something to do with the string immutability?
welcoming expert views on this.