.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隐式转换运算符更容易使用,但是如果您希望运算符的用户能够意识到正在进行转换,则显式运算符很有用。

 

### VB.NET 数据类型概述 在 VB.NET 中,数据类型分为简单类型和复合类型。每种数据类型都有特定的作用范围以及内存占用情况。 #### 简单数据类型 1. **整数类型** - `SByte`:8位有符号整数,取值范围是从-128到127[^2]。 - `Short` 或者 `Int16`:16位有符号整数,取值范围是从-32,768 到 32,767。 - `Integer` 或者 `Int32`:32位有符号整数,这是最常用的整型变量,取值范围是从-2,147,483,648 到 2,147,483,647。 - `Long` 或者 `Int64`:64位有符号整数,用于存储非常大的数值,取值范围是从-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。 2. **浮点类型** - `Single`:32位(4字节)单精度浮点数,适用于表示带有小数部分的数据,但精确度较低。 - `Double`:64位(8字节)双精度浮点数,提供更高的精度,适合科学计算等领域。 3. **字符与字符串类型** - `Char`:代表单一Unicode字符,占两个字节的空间。 - `String`:由一系列 Unicode 字符组成的序列,长度可变,在程序中广泛用来处理文本信息。 4. **布尔类型** - `Boolean`:仅能持有 True 和 False 这两种逻辑状态之一,通常用于条件判断表达式的返回结果。 5. **日期时间类型** - `Date`:专门设计来保存日期或时间的信息,内部是以64位数字形式记录自公元纪元以来的时间间隔。 #### 复合数据类型 除了上述基本数据类型外,还有几种重要的复杂数据结构: - **数组 (Array)**:可以容纳多个相同类型的元素集合,通过索引来访问各个成员项。 ```vb.net Dim numbers As Integer() = {1, 2, 3} ``` - **枚举 (Enum)**:允许创建一组命名常量,提高代码的可读性和维护性。 ```vb.net Public Enum Color Red Green Blue End Enum ``` - **结构体 (Structure)**:类似于类的对象,但是更轻量化;主要用于定义小型实体及其属性。 ```vb.net Structure Point Public X As Double Public Y As Double End Structure ``` - **对象(Object)**:作为所有其他引用类型的基底类型,能够指向任何实例化的 .NET 类或其他支持 COM 的组件。 ```vb.net Dim objDb As Object objDb = New DAO.Field() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值