引用类型派生自 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; } } }