C#的数据类型

C#类型学习
C#类型概览

对C#的数据类型学习首先对整体做一个把握,C#数据类型的分类和层次如下所示 :

  • C#数据类型

  • 值类型
    1. 简单类型(Simple type)
      1. 整形
      2. 浮点型
      3. 十进制型(decimal)
      4. 布尔型(bool)
      5. 字符型(char)
    2. 结构类型(Struct type)
      1. struct
    3. 枚举类型(Enumeration types)
      1. enum
  • 引用类型
    1. 类(class)
    2. 接口(interface)
    3. 委托(delegate)
按照微软的划分,struct和简单类型组成Struct(结构)类型,而值类型由Struct(结构)类型和枚举类型组成。就我个人而言觉得以上划分更为合理,也便于学习,毕竟struct比起简单类型有更多要学习的东西。
值类型和引用类型的区别

值类型和引用类型最大的区别在于:值类型的变量总是包含该类型的值。对值类型变量赋值将创建所赋的值的一个副本,而对引用类型变量赋值将创建引用的副本,而不是引用对象的副本。其余的还有:

  • 所有的值类型均隐式派生自Object类。
  • 与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。
  • 与引用类型不同,值类型不可能包含null值。
  • 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
以上是从MSDN中摘录的说明。到目前我我还不太清晰的是:“所有的值类型均隐式派生自Object类”。主要是对隐式派生未理解。另外也未查到相关的代码。
简单类型

对于简单类型,要特别说明的是:

  • 所有的简单类型均为.NET Framework系统类型的别名。即每一个简单类型都有相应的.NET Framework类型与之对应。(参见下表)
  • 简单类型可以使用文字初始化,也可以使用new调用默认的构造函数进行初始化。(使用默认函数初始化后的默认值可参见下表。)

所谓的两种初始化如下所示:

int myint; //声明变量
myint=0; //或者 myint=new int();

当然也可以声明和初始化一起完成。

int myint=0; //或者int myint=new int();
注意在C#中,局部变量不进行初始化是无法使用的。
struct类型

struct 类型是一种可包含构造函数、常数、字段、方法、属性、索引器、运算符、事件和嵌套类型的值类型。不知你有没有想过这个问题:“为什么需要struct”?确实,似乎有了class,更符合OO我们无须struct。看看MSDN中给我们的解释:struct类型适合表示如点、矩形和颜色这样的轻量对象。尽管可能将一个点表示为类,但结构在某些方案中更有效。例如,如果声明一个含有1000个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低。没错,因为struct是值类型,所以它会更高效。

关于struct,还有一些东西要提醒大家:

  • 声明结构的默认(无参数)构造函数是错误的。系统总是提供默认构造函数初始化结构成员(默认值参考下表)。
  • 在结构中初始化实例字段是错误的。
  • 如果不使用 new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。
  • 结构不存在继承,但结构从基类Object继承。结构可实现接口,其方式同类完全一样。
  • 你可以对构造函数进行重载。

 

最后,再次提醒大家,struct是值类型,请在参数传递时注意这一点。另外,struct的数据成员(字段)可以是其他的引用类型。
枚举类型enum

一直用得最少的类型。看看,MSDN的解释:由一组称为枚举数列表的命名常数组成的独特类型。每种枚举类型均有一种基础类型,此基础类型可以是除 char 类型外的任何整型。要说的东西不多,感觉就是起到助记的作用。


C# 类型.NET Framework 类型说明取值范围默认值
boolSystem.Boolean布尔类型true|falsefalse
byteSystem.Byte无符号 8 位整数0 到 2550
sbyteSystem.SByte有符号 8 位整数-128 到 1270
charSystem.Char16 位 Unicode 字符U+0000 到 U+ffff'/0'
decimalSystem.Decimal十进制类型,28 到 29 位有效位±1.0 × 10-28 到 ±7.9 × 10280.0M
doubleSystem.Double双精度浮点数,15 到 16 位±5.0 × 10-324 到 ±1.7 × 103080.0D
floatSystem.Single单精度浮点数,7 位±1.5 ×10-45 到 ±3.4 × 10380.0F
intSystem.Int32有符号 32 位整数-2,147,483,648 到 2,147,483,6470
uintSystem.UInt32无符号 32 位整数0 到 4,294,967,2950
longSystem.Int64有符号 64 位整数-9,223,372,036,854,775,808 到 9,223,372,036,854,775,8070L
ulongSystem.UInt64无符号 64 位整数0 到 18,446,744,073,709,551,6150
shortSystem.Int16有符号 16 位整数-32,768 到 32,7670
ushortSystem.UInt16无符号 16 位整数0 到 65,5350
stringSystem.StringUnicode 字符的字符串  
objectSystem.Object 所有数据类型无论是预定义的还是用户定义的,均从 System.Object 类继承  
struct 结构类型 将所有的值类型字段设置为默认值并将所有的引用类型字段设置为 null 时产生的值。
enum 枚举类型 表达式 (E)0 产生的值,其中 E 为 enum 标识符。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值