在C#中学习中,你会很早的遇到预定义数据类型这个概念,但你有没有仔细想过它存在的意义?正所谓“存在即合理”,预定义数据类型的存在目的主要有俩个方面,一是为了增加程序的安全性,同时减轻编译器负担,加快编译速度;二是体现了语言互操作性中强数据类型的重要性。
首先,我们需要了解,C#中的预定义数据类型并非内置于C#中,而是包含于.NET中,这样做的原因,也体现出了微软对.NET框架所抱有的期望,这.NET框架下,不仅仅有C#一种高级语言,还有如VB.NET(从VB6升级到VB .NET 2002开始)、VC++.NET、Visual F#等。把预定义数据类型内置于.NET框架中,为语言的互操作打下了基础。而在.NET中,预定义数据类型的实现是通过CTS(通用类型系统)和CLS(公共语言规范)来实现的。 其中CTS的作用在于将其他语言的数据类型转换为预定义数据类型,而CLS的作用在于使编译器可以识别相应的数据类型,简单的来说,CTS是媒介,CLS是识别。
其次,我们需要知道,预定义数据类型主要分为俩种,即值类型和引用类型。它们之间的差距在与在内存中的存储位置,值类型存储在内存的栈上,而引用类型存储在内存的托管堆中,记得我和你讲的,.NET的一大特色是托管代码吗?这样做的目的在于,面向对象的语言允许用户自定义数据类型(用户自定的类Class),通过托管可以将C#转化为中间语言(IL),再由中间语言编译为机器代码(计算机可以识别的二进制编码0和1),引用类型的编译过程即为C#—>IL—>机器码,而值类型仅仅只有一个值(如int i = 1;),所以可以直接被转换为机器码。
最后,我们来认识15个预定义数据类型,其中13个为值类型,2个为引用类型。值类型又分为五类,有整数类型、浮点类型、字符类型、布尔类型以及decimal类型:
整数类型有:sbyte、short、int、long,byte、ushort、uint、ulong,其中byte为特例,byte代表8位无符号整数,范围为0~255,而sbyte代表8位有符号整数范围为-128~127,其他u-为无符号整数。
浮点类型有:float和double。
对于整数类型和浮点类型,会涉及到类型转换的问题(将int转为float等),在下一篇将讲到显式和隐式转换问题。
字符类型有:char,字符类型有一个很重要的应用是转义字符,也将在下一篇将讲到。
布尔类型有:bool,布尔类型的值只能为true和false,不可以用0和1来表示。
decimal类型有:decimal,decimal类型主要用于高精度的浮点表示,它可以表示小数点后28位,所以适合财务计算。
ps:汪汪汪汪汪汪~