.NET 数据类型概述

开发 后端
任何一门开发语言都需要数据类型作为其基础根本,就如同自然语言中的文字一般,所以想要掌握一门开发语言就要先了解其中的数据类型,接下来我就谈谈我对.NET的数据类型的了解(开发语言以C#为主)。

任何一门开发语言都需要数据类型作为其基础根本,就如同自然语言中的文字一般,所以想要掌握一门开发语言就要先了解其中的数据类型,接下来我就谈谈我对.NET的数据类型的了解(开发语言以C#为主)。

数据类型

在C#中数据类型主要可以分为值类型、引用类型和指针类型,以下是一个数据类型的归类表:

  • ValueType
    • 数值数据
      • sbyte:-128~127
      • byte:0~255
      • short:-32768~32767
      • ushort:0~65535
      • int:-2147483648~2147483647
      • uint:0~4294967295
      • long:-9223372036854775808~9223372036854775807
      • ulong:0~18446744073709551615
      • float:1.5*10^-45~3.4*10^38
      • double:5*10^-324~1.7*10^308
      • decimal:1*10^-28~7.9*10^2
    • Boolean
      • 关键字:bool
      • 值范围:True或False
    • Char
      • 关键字:char
      • 值范围:一个Unicode字符,存储0~65535之间的整数
    • DateTime和TimeSpan
    • Numerics
      • 结构:BigInteger
    • 枚举
      • 底层存储:byte、short、int(默认)、long
    • 结构
  • 引用类型
    • Class 类
    • Interface 接口
    • Dynamic
    • Object 超级父类
    • String 字符串
    • Delegate 委托
    • Array 数组
  • 指针类型

   数据类型默认值

  • 数值数据:0
  • Boolean:false
  • Char:单个空字符
  • DateTime和TimeSpan:1/1/0001 12:00:00 AM
  • Numerics:0
  • 引用类型:null

可空类型

用于表示没有值的数值数据,在实际类型的值上加上null,这种语法只对值类型是合法的,语法是只要在值类型关键字上加?后缀。例如:int? nullableInt = 0;

内存分配

值类型的变量是分配在栈上,当变量离开定义域范围就会被内存移除。

引用类型变量则是分配在堆上进行托管,有垃圾回收机制控制。

复制
  • 浅复制

     当ValueType中包含引用类型时,生成2个独立的ValueType的值,但其中的引用类型将生成一个引用的副本,即指向内存中的同一个对象的引用,改变其中一个的值,另一个也会随之改变。

  • 深复制
     将内部引用的状态完全复制到一个新对象中,需要实现ICloneable接口。

赋值操作

值类型赋值是复制一份副本,2个变量是独立操作的。

引用类型赋值是2个变量是指向托管堆中的同一个对象,改变其中一个变量的值,另一个也会改变。

值类型中包含引用类型时赋值是默认为浅复制。

传递

  • 值类型
    • 按值传递

     传递变量的一个数据副本。

  • 引用类型
    • 按值传递     复制了指向调用者对象的引用,可以改变对象的状态数据,但是不能引用重新赋值一个新对象
    • 按引用传递     可以改变对象的状态数据,也可以改变引用在内存中的指向,把引用重新赋值一个新的对象
类型转换
  • 隐式转换
    • 宽化

     隐式向上转换,从值范围小的类型向值范围大的类型转换,不会丢失数据。

  • 显示转换
    • 强制类型转换
    • 窄化
     显示向下转换,从值范围大的类型向值范围小的类型转换
  • 溢出检测(默认不检测)
    • 代码级检测
      • unchecked
      • checked

    • 项目级检测
      • VS->项目属性->生成->高级->检测运算上下溢
  • Convert命令

     可进行显示的宽化、窄化、字符串解析数值等操作

  • 自定义类型转换

使用关键字explicit和implicit自定义类型转换。implicit隐式转换运算符更容易使用,但是如果您希望运算符的用户能够意识到正在进行转换,则显式运算符很有用。

 

 

责任编辑:陈四芳 来源: M守护神博客
相关推荐

2010-01-20 18:14:58

VB.NET数据类型

2013-07-30 14:48:58

.NET数据类型

2010-01-14 14:21:07

2009-08-04 14:56:34

ASP.NET数据类型

2009-10-13 16:05:07

VB.NET字符数据类

2009-07-28 11:09:02

ASP.NET状态类型

2009-10-16 12:52:28

VB.NET简单数据类

2009-11-12 13:19:55

2009-11-02 16:15:51

VB.NET字符数据类

2009-10-13 14:38:10

VB.NET访问类型

2010-01-15 10:47:15

VB.NET命名空间

2010-01-07 14:10:41

VB.NET数据类型

2019-08-12 11:40:48

数据库SQLite3数据类型

2016-08-18 14:13:55

JavaScript基本数据引用数据

2014-01-05 17:08:09

PostgreSQL数据类型

2010-07-22 17:57:40

2010-08-10 17:17:59

2010-10-15 13:28:34

MySql数据类型

2017-07-10 13:38:07

MySQL数据类型整数类型

2009-11-10 11:04:09

VB.NET数据类型
点赞
收藏

51CTO技术栈公众号