一、概述
C# 的类型系统是统一的,因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类。C#的数据类型主要分为三类:值类型、引用类型和指针类型(如下图所示)。另外,指针类型只能用在不安全代码中,本文就不做进一步的探讨。
值类型与引用类型的不同之处在于:值类型的变量直接包含其数据,而引用类型的变量存储对其数据的引用,后者称为对象(object)。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有自己的数据副本,对一个变量的操作不可能影响另外一个 变量。
二、值类型
所有值类型都隐式声明了一个称为默认构造函数的公共无参数实例构造函数。默认构造函数返回一个零初始化实例,它就是该值类型的默认值。
1、简单类型
C#提供称为简单类型的预定义结构类型集。简单类型通过保留字标识,而这些保留字只是System命名空间中预定义结构类型的别名。这里只是介绍一下常用的几种简单类型:
int用来定义整数,在编程最常用的数据类型,例如数量、年龄等等。
float单精度浮点型,可表示精度为7位。
double双精度浮点型,可表示精度为15-16位。
decimal小数型是128位的数据类型,适合用于财务计算和货币计算。decimal类型可以表示具有28或29个有效数字。
bool类型表示布尔逻辑量。bool 类型的可能值为true和false。
char类型是字符串(string)的构成单元,比如code这个字符串是由c,o,d,e 4个字符组成的。
2、结构类型(struct)
结构类型是一种值类型,它可以声明常量、字段、方法、属性、索引器、运算符、实例构造函数、静态构造函数和嵌套类型。
3、枚举类型(enum)
枚举类型是具有命名常量的独特的类型。每个枚举类型都有一个基础类型,该基础类型必须为 byte、sbyte、short、ushort、int、uint、long或ulong。枚举类型的值集和它的基础类型的值集相同。枚举值主要为了限定变量的取值范围。
三、引用类型
1、类类型
类类型定义包含数据成员、函数成员和嵌套类型的数据结构,其中数据成员包括常量和字段,函数成员包括方法、属性、事件、索引器、运算符、实例构造函数、析构函数和静态构造函数。类类型支持继承,继承是派生类可用来扩展和专门化基类的一种机制。
string 类型是直接从object继承的密封类类型,用来表示一段文本,比如姓名,单位这样的信息。
2、接口类型
一个接口定义一个协定。实现某接口的类或结构必须遵守该接口定义的协定。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口。
3、数组类型
数组是一种数据结构,它包含可通过计算索引访问的零个或更多个变量。数组中包含的变量(又称数组的元素)具有相同的类型,该类型称为数组的元素类型。
4、委托类型
委托是引用一个或多个方法的数据结构。对于实例方法,委托还可引用实例方法对应的对象实例。
在 C 或 C++ 中与委托最接近的是函数指针,但函数指针只能引用静态函数,而委托则既可以引用静态方法,也可以引用实例方法。在后一种情况中,委托不仅存储了一个对该方法入口点的引用,还存储了一个对相应的对象实例的引用,该方法就是通过此对象实例被调用的。