|
■No74206 (ぶなっぷ さん) に返信 > なるほど、つまり > Test2 = "bbb"; > はTest2インスタンスの内部文字列を書き換えているわけではなく、 > "bbb" > という内部文字列を持った新たなstringインスタンスを生成し、 > 参照先をそのインスタンスに書き換えているというわけですな?
参照先の中身を直接書き換えたい場合は、このようなコードが必要になります。
class Program { static void Main() { string Test = "C#"; string Test2 = Test; Console.WriteLine("初期値は同じ:{0} / {1}", Test, Test2); // この段階では、「Object.ReferenceEquals(Test, Test2)」は true です。
unsafe { fixed (char* p = Test) { p[0] = 'C'; p[1] = '丼'; } Console.WriteLine("両方変わる:{0} / {1}", Test, Test2); } // この段階でも、「Object.ReferenceEquals(Test, Test2)」は true です。 // 通常は String 型は不変ですが、unsafe コードでの書き換えは可能です。
Test = "VB"; Console.WriteLine("片方だけ変わる:{0} / {1}", Test, Test2); // この段階では、Test 側が別のインスタンスになるため、 // 「Object.ReferenceEquals(Test, Test2)」は false です。
Console.ReadKey(); } }
|