引用類型派生自 System.Object ,而值類型均隱式派生自 System.ValueType 。數組
其實 System.ValueType 也是繼承自 System.Object ,只不過它是特立獨行的一個分支。spa
數值類型、布爾值、結構、枚舉都是值類型。例:code
[TestFixture] public class Tests { [Test] public void Test() { // 數值類型 Console.WriteLine(1 is ValueType); // true // 布爾類型 Console.WriteLine(true is ValueType); // true // 結構類型 Console.WriteLine(new Person() is ValueType); // true // 枚舉類型 Console.WriteLine(EnumTest.Item1 is ValueType); // true } } public struct Person{} public enum EnumTest { Item1 = 1 }
字符串、數組、類、接口等都是引用類型。對象
結構體是一種值類型,它的定義與普通類對象類似,只不過須要將定義類的關鍵字 class 換成 struct 。對於結構體,不像類那樣存在繼承,即一個結構不能從另外一個結構或類繼承。可是結構是從基類 Object 繼承。blog
[TestFixture] public class Tests { [Test] public void Test() { var person1 = new Person(); person1.Id = 1; person1.Name = "張三"; Person person2 = person1; person1.Name = "李四"; Console.WriteLine(person2.Name); // 張三 Console.WriteLine(person1 is ValueType); // True } } public struct Person { private int id; private string name; public int Id { get { return id; } set { id = value; } } public string Name { get { return name; } set { name = value; } } }