在C#中类型分为值类型和引用类型,引用类型和值类型都继承自System.Object类,几乎所有的引用类型都直接从System.Object继承,而值类型具体一点则继承System.Object的子类,即继承System.ValueType。而String类型却有点特别,虽然它属于引用类型,但是他的一些特性却有点类似值类型。
关于C# String
1、不变性
我们先来看看一个例子:
static void Main(string[] args){ string str1 = "string"; string str2 = str1; Console.WriteLine(object.ReferenceEquals(str1, str2)); str2 += "change"; Console.WriteLine(object.ReferenceEquals(str1, str2)); Console.ReadKey(); }
输出结果是True、False。为什么呢?我们来看看IL。
.entrypoint // 代码大小 48 (0x30) .maxstack 2 .locals init ([0] string str1, [1] string str2) IL_0000: nop IL_0001: ldstr "string" IL_0006: stloc.0 &