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: 191

Filed under:
|

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

Related posts about c#

Related posts about strings