Why strings behave like ValueType
        Posted  
        
            by AJP
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by AJP
        
        
        
        Published on 2010-05-26T09:38:21Z
        Indexed on 
            2010/05/26
            9:41 UTC
        
        
        Read the original article
        Hit count: 258
        
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.
© Stack Overflow or respective owner