详细介绍C#数据类型

开发 后端
本文详细介绍了C#中的数据类型,值类型,引用类型和类类型。一起来看。

C#编程中,大家会经常使用到不同的数据类型,那么C#编程语言到底有什么类型呢?具体如下:

1.1 值类型

各种值类型总是含有相应该类型的一个值。C#迫使你初始化变量才能使用它们进行计算-变量没有初始化不会出问题,因为当你企图使用它们时,编译器会告诉你。 每当把一个值赋给一个值类型时,该值实际上被拷贝了。相比,对于引用类型,仅是引用被拷贝了,而实际的值仍然保留在相同的内存位置,但现在有两个对象指向了它(引用它)。C#的值类型可以归类如下:

  • 简单类型(Simple types )
  • 结构类型(struct types)
  • 枚举类型(Enumeration types)

1.1.1 简单类型

在C#中出现的简单类型共享一些特性。***,它们都是.NET系统类型的别名。第二,由简单类型组成的常量表达式仅在编译时而不是运行时受检测。***,简单类型可以按字面被初始化。以下为C#简单类型归类:

  • 整型
  • 布尔型
  • 字符型 (整型的一种特殊情况)
  • 浮点型
  • 小数型

1.1.1.1 整型

C#中有9个整型。 sbyte 、byte、 short、 ushort、 int、 uint、 long、 ulong 和 char(单独一节讨论)。它们具有以下特性:

  • sbyte型为有符号8位整数,取值范围在128~127之间。
  • bytet型为无符号16位整数,取值范围在0~255之间。
  • short型为有符号16位整数,取值范围在-32,768~32,767之间。
  • ushort型为无符号16位整数,取值范围在0~65,535之间。
  • int型为有符号32位整数,取值范围在-2,147,483,648~ 2,147,483,647之间。
  • uint型为无符号32位整数,取值范围在 0 ~ 4,294,967,295之间。
  • long型为64位有符号整数,取值范围在9,223,372,036,854,775,808~ 9,223,372,036,854,775,807之间。
  • ulong型为64位无符号整数,取值范围在0 ~ 18,446,744,073,709,551,615之间。

VB和C程序员都可能会对int和long数据类型所代表的新范围感到惊讶。和其它的编程语言相比,在C#中,int不再取决于一个机器的字(word)的大小,而long被设成64位。

1.1.1.2 布尔型

布尔数据类型有true和false两个布尔值。可以赋于true或false值给一个布尔变量,或可以赋于一个表达式,其所求出的值等于两者之一:

 

  1. bool bTest = (80 > 90);  

 

与C和C++相比,在C#中,true值不再为任何非零值。不要为了增加方便而把其它整型转换成布尔型。

1.1.1.3 字符型

字符型为一个单Unicode 字符。一个Unicode字符16位长,它可以用来表示世界上多种语言。可以按以下方法给一个字符变量赋值:

 

  1. char chSomeChar = 'A';  

 

除此之外,可以通过十六进制转义符(前缀\x)或Unicode表示法给变量赋值(前缀\u):

 

  1. char chSomeChar = '\x0065';   
  2. char chSomeChar = '\u0065';  

 

不存在把char转换成其它数据类型的隐式转换。这就意味着,在C#中把一个字符变量当作另外的整数数据类型看待是行不通的——这是C程序员必须改变习惯的另一个方面。但是,可以运用显式转换:

 

  1. char chSomeChar = (char)65;   
  2. int nSomeInt = (int)'A';  

 

在C中仍然存在着转义符(字符含义)。要换换脑筋,请看表4.1。

Table 4.1 转义符( Escape Sequences)

转义符 字符名

\' 单引号

\" 双引号

\\ 反斜杠

\0 空字符

\a 感叹号(Alert )

\b 退格

\f 换页

\n 新行

\r 回车

\t 水平 tab

\v 垂直tab

1.1.1.4 浮点型

两种数据类型被当作浮点型:float和double。它们的差别在于取值范围和精度:

float: 取值范围在 1.5x10^-45~ 3.4x10^38之间, 精度为7位数。

double: 取值范围在 5.0x10^-324 ~ 1.7x10^308之间, 精度为 15~16 位数。

当用两种浮点型执行运算时,可以产生以下的值:

  • 正零和负零
  • 正无穷和负无穷
  • 非数字值(Not-a-Number,缩写NaN)
  • 非零值的有限数集

另一个运算规则为,当表达式中的一个值是浮点型时,所有其它的类型都要被转换成浮点型才能执行运算。

1.1.1.5 小数型(The decimal Type)

小数型是一种高精度、128位数据类型,它打算用于金融和货币的计算。它所表示的范围从大约1.0x10^-28 到 7.9x10^28,具有28至29位有效数字。要注意,精度是以位数 (digits)而不是以小数位(decimal places)表示。运算准确到28个小数位的***值。

正如你所看到的,它的取值范围比double的还窄,但它更精确。因此,没有decimal和double之间的隐式转换——往一个方向转换可能会溢出,往另外一个方向可能会丢失精度。你不得不运用显式转换。

当定义一个变量并赋值给它时,使用 m 后缀以表明它是一个小数型:

 

  1. decimal decMyValue = 1.0m;  

 

如果省略了m,在变量被赋值之前,它将被编译器认作double型。

1.1.2 结构类型

一个结构类型可以声明构造函数、常数、字段、方法、属性、索引、操作符和嵌套类型。尽管列出来的功能看起来象一个成熟的类,但在C#中,结构和类的区别在于结构是一个值类型,而类是一个引用类型。与C++相比,这里可以用结构关键字定义一个类。

使用结构的主要思想是用于创建小型的对象,如Point和FileInfo等等。你可以节省内存,因为没有如类对象所需的那样有额外的引用产生。例如,当声明含有成千上万个对象的数组时,这会引起极大的差异。

清单4.1 包含一个命名为IP的简单结构,它表示一个使用byte类型的4个字段的IP地址。我不包括方法等,因为这些工作正如使用类一样,将在下一章有详细的描述。

清单1.1 定义一个简单的结构

 

  1. using System;   
  2. struct IP   
  3. {   
  4. public byte b1,b2,b3,b4;   
  5. }   
  6. class Test   
  7. {   
  8. public static void Main()   
  9. {   
  10. IP myIP;   
  11. myIP.b1 = 192;   
  12. myIP.b2 = 168;   
  13. myIP.b3 = 1;   
  14. myIP.b4 = 101;   
  15. Console.Write("{0}.{1}.",myIP.b1,myIP.b2);   
  16. Console.Write("{0}.{1}",myIP.b3,myIP.b4);   
  17. }   
  18. }  

 

1.1.3 枚举类型

当你想声明一个由一指定常量集合组成的独特类型时,枚举类型正是你要寻觅的。最简单的形式,它看起来可能象这样:

 

  1. enum MonthNames { January, February, March, April };  

 

因我惯用缺省设置,故枚举元素是int型,且***个元素为0值。每一个连续的元素按1递增。如果你想给***个元素直接赋值,可以如下把它设成1:

 

  1. enum MonthNames { January=1, February, March, April };  

 

如果你想赋任意值给每个元素——甚至相同的值——这也没有问题:

 

  1. enum MonthNames { January=31, February=28, March=31, April=30 };  

 

***的选择是不同于int的数据类型。可以在一条语句中按如此赋值:

 

  1. enum MonthNames : byte { January=31, February=28, March=31, April=30 };  

 

你可以使用的类型仅限于long、int、short和byte。

1.2 引用类型

和值类型相比,引用类型不存储它们所代表的实际数据,但它们存储实际数据的引用。在C#中提供以下引用类型给你使用:

  • 对象类型
  • 类类 型
  • 接口
  • 代表元
  • 字符串类型
  • 数组

1.2.1 对象类型

对象类型是所有类型之母——它是其它类型最根本的基类。因为它是所有对象的基类,所以可把任何类型的值赋给它。例如,一个整型:

 

  1. object theObj = 123;  

 

给所有的C++程序员一个警告:object并不等价于你可能正在寻找的void*。无论如何,忘掉指针总是个好主意。

当一个值类型被加框(作为一个对象利用)时,对象类型就被使用了。这一章稍后会讨论到加框和消框

1.2.2 类类型

一个类类型可以包含数据成员、函数成员和嵌套类型。数据成员是常量、字段和事件。函数成员包括方法、属性、索引、操作符、构造函数和析构函数。类和结构的功能是非常相似的,但正如前面所述,结构是值类型而类是引用类型。

希望对你有帮助。

【编辑推荐】

  1. c#.net实体类序列化方法
  2. C#中log4net使用方法(一)
  3. C#中log4Net使用方法(二)
  4. C#中的闭包是怎么捕获变量的
  5. 解析C#委托、时间和Lambda表达式
责任编辑:于铁 来源: 荷塘秋色的博客
相关推荐

2010-01-19 13:17:05

C++数据类型

2009-09-07 10:48:53

C#数据类型

2009-09-04 10:16:30

C#数据类型

2009-09-11 12:00:33

C#预定义数据类型

2009-08-14 17:04:50

C#类型系统

2009-08-13 15:19:17

C#数据类型

2009-08-27 15:47:00

C#数据类型string

2009-08-10 16:30:56

C# BitmapDa

2009-08-12 15:34:40

C# DBNull

2009-08-28 17:45:19

C#自定义数据

2011-07-21 14:45:13

java

2009-08-21 15:16:23

C#使用指针

2009-08-03 18:49:17

C#和Java

2009-08-20 15:26:42

C#循环语句

2009-08-24 18:21:23

C# ListView

2009-08-26 17:31:59

C# const常量

2009-08-07 16:10:20

C#调用API

2009-08-21 09:23:11

C# GDI+

2009-08-12 16:26:27

C#数据类型转换

2009-08-13 13:38:30

C#命名规范
点赞
收藏

51CTO技术栈公众号