zoukankan      html  css  js  c++  java
  • .NET 数据类型概述

      任何一门开发语言都需要数据类型作为其基础根本,就如同自然语言中的文字一般,所以想要掌握一门开发语言就要先了解其中的数据类型,接下来我就谈谈我对.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隐式转换运算符更容易使用,但是如果您希望运算符的用户能够意识到正在进行转换,则显式运算符很有用。
  • 相关阅读:
    sqlalchemy的orm的高级用法,分组,排序,聚合等方法
    flask的SQLAlchemy,连接数据库的增删改查操作
    wtforms的form表单的高级用法
    初始wtforms表单,以及简单使用
    命令启动flask以及自定义命令
    MySQL5.5安装教程
    Java设计模式-策略模式实际应用场景
    Java设计模式-策略模式详解
    Oracle数据库之FORALL与BULK COLLECT语句
    代理模式详解(静态代理和动态代理的区别以及联系)
  • 原文地址:https://www.cnblogs.com/liusuqi/p/3090105.html
Copyright © 2011-2022 走看看