在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 &