数据类型
C#的数据类型分为三大类,分别为值类型、引用类型和类型转换。
值类型包括三种,分别为简单类型、结构类型和枚举类型。其中简单类型又包括整数型、浮点型、小数型和布尔型。C#中的简单类型和VB中的数值型是有些地方是相似的,这个可以将二者比较起来进行掌握。VB中的数值型包括整数型(整型和长整型)、浮点型(单精度浮点型、双精度浮点型)、货币型和字节型。
可是有一点需要明确的是,浮点型数据就是用来表示带有小数的实数的,可C#中为什么又单列出小数型这一数据类型呢?原来C#中的小数类型是高精度的数据类型,占用16个字节,主要是为了满足需要高精度的财务和金荣计算机领域,小数类型数据的范围远远小于浮点型,但它比浮点型的精确度要高得多。二者区分的标准为小数类型数据后面有m或者M,否则系统就会把其当做标准的浮点型去处理了。
但是我们在实际操作中,往往会遇到这样的情况,那就是有些数据信息是由若干数据类型的数据组合起来的,我们不能单单通过定义一个数组来涵盖处理所有的信息,这时就要用到结构类型了。结构类型是把不同类型数据信息组合在一起形成的组合类型,其中的结构是用户自定义的数据类型。下面通过一个例子简单说明一下。
下面是一个关于结构类型的举例
#region 这是一个结构类型 struct WorkerInformation //定义一个工厂员工信息的结构类型 { long cardNo; //定义结构的数据成员,包括卡号;姓名;性别;家庭住址;联系方式 string name; string sex; int age; string address; long telephone; void structmethod() { //可执行的代码 } }#endregion
例子很简单,上面也加了注释,这里就不进一步解释了。
下面来说一下枚举,那么什么是枚举呢?用一句话来概括一下,枚举类型就是将一个变量所有的值一一列出来,而这个变量在所列的范围内取值。定义枚举的方法是使用enum关键字。下面通过一个例子来说明一下。
enum family { grandfather,grandmother,father,mother,sister,me; }
这个例子就是一个很简单的枚举,通过定义一个family这个变量,把这个变量里的所有值一一列出来。下面说一下引用类型,它是C#中和值类型并列的类型,它与值类型的区别在于他们在内存中的存储方式。值类型存储在栈中,引用类型所存储的实际数据是当前引用值的地址,而当前引用值这个对象本身存储在内存堆中。说起来有些拗口。换句话来说,简单数据类型存储的是自身的值,而引用类型存储的是将自身的值直接指向到某个对象的值。说到这里,又不免提一下堆和栈。
这里需要提一下的是堆和栈的区别。栈用于存储固定长度的数据;堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过使用方便。在C#中基本数据类型Bool和Long都是值类型。相反,大多数复杂的C#数据类型包括我们自己声明的类都是引用类,它们分配在堆中。
最后说一下类型转换,数据类型在一定条件下可以相互转换,C#中允许有两种转换方式,即隐式转换(implicit conversions)和显式转换(explicit conversions)。隐式转换是系统默认的,不需要声明就可以进行转换;相反,显式转换需要用户明确的指定转换类型,一般在不存在该类型的隐式转换的情况下才使用。
相比之下,VB的数据类型就清晰得多,VB提供的数据类型主要有数值型、字符型、布尔型、日期型、可变型和对象型。这里我想说的是,每种编程语言,其数据类型都有出入,但是我们在掌握一门编程语言的同时,再继续掌握其他编程语言时,就要比较之前所掌握的内容,将二者对立起来,相同的内容要继续回顾,不同的地方要区别开来重点掌握,这才是我们学习时应该把握的一种技巧。