C#数据类型超全(满满干货)

时间:2024-10-29 20:24:09

C#数据类型分为三类,分别是值类型,引用类型,指针类型(不常用)

值类型:直接分配一个值,指的就是系统分配内存来存储一个数据。

简单值类型的数据类型包含以下几种:

???? 整数类型

类型 描述 范围

默认值

byte 8 位无符号整数 0 到 255 0
int 32 位有符号整数类型 -2,147,483,648 到 2,147,483,647 0
long 64 位有符号整数类型 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0L
sbyte 8 位有符号整数类型 -128 到 127 0
short 16 位有符号整数类型 -32,768 到 32,767 0
uint 32 位无符号整数类型 0 到 4,294,967,295 0
ulong 64 位无符号整数类型 0 到 18,446,744,073,709,551,615 0
ushort 16 位无符号整数类型 0 到 65,535

0

???? 字符类型

类型 描述 范围

默认值

char 16 位 Unicode 字符 U +0000 到 U +ffff '\0'

???? 浮点类型(实数类型)

类型 描述 范围

默认值

double 64 位双精度浮点型 (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 0.0D
float 32 位单精度浮点型 -3.4 x 1038 到 + 3.4 x 1038 0.0F
decimal 128 位精确的十进制值,28-29 有效位数 (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 0.0M

???? 布尔类型

类型 描述 范围

默认值

bool 布尔值 True 或 False False

复合值类型的数据类型包括以下几种:

❤ 结构类型

struct类型是一种值类型,通常用于封装小型相关变量组。(在这个结构类型中,可以定义多个不同简单值类型的变量)

举个栗子:

  1. //定义一个书的特征
  2. public struct Book
  3. {
  4. public decimal price;
  5. public string title;
  6. public string author;
  7. }

❤ 枚举类型

枚举类型是一种值类型, 基于整数类型的一系列命名常量,为了定义枚举类型,通常使用enum关键字和枚举成员的名字。

举个栗子:

  1. 枚举季节
  2. enum Season
  3. {
  4. Spring,
  5. Summer,
  6. Autumn,
  7. Winter
  8. }

 

引用类型:分配一个地址,存储的是一个内存位置,不指具体的一个数值。【对一个变量执行的操作会影响另一个变量所引用的对象】

引用类型的数据烈性包含以下几种:

❤ 内置的引用类型:

类型 描述
object 对象类型:是C#通用类型系统中所有数据类型的终极基类
Dynamic 动态类型:可以存储任何类型的值在动态数据类型变量中
String

字符串类型:可以分配变量任何字符串值

对象类型涉及一个装箱取消装箱问题

装箱是将值类型转换为object类型或由此值类型实现的任何借口类型的过程。

取消装箱是从对象中提取值类型

  1. //装箱 boxing
  2. int i = 3 ; //分配在栈上
  3. object o = i ; //隐式装箱操作,int i 在堆上
  4. object b = (object)i ; //显示装箱操作
  5. ----------------------
  6. //拆箱 unboxing
  7. int j = (int) o ; //显示拆箱(将对象o拆箱为int类型)
  8. ----------------------
  9. int k = b ; //error!!, 不能隐式拆箱

/zjtao/p/

深度解读装箱:装箱是先为object变量在堆上开辟一方空间,然后将栈上存放的数值转存到堆上,栈上残留的就是堆上的值所在的位置-------存储地址,所以这样就造成什么问题呢?访问速度慢(先访问栈,然后再去访问堆,访问堆的速度远远慢于访问堆的速度)且占用内存大(需要为变量在堆上开辟空间)

灵魂拷问:为什么访问速度慢且占用内存大,还要使用引用数据呢?直接用值数据不就可以了,栈上存放数值,直接读取数值。

因为运用引用类型可以表示同一对象的不同属性,对其进行封装。

eg:

基本数据都是单一的值"hello"123 true,值和值之间没有联系

比如,表示一个人的信息(name gender age)

  1. var name="孙悟空";
  2. var gender='男';
  3. var age=18;

创建的变量都是独立,不能成为一个整体,比如,gender也可以表示猪八戒的性别,

  1. obj.name="孙悟空";
  2. obj.gender='男';
  3. obj.age=18;

对比之前就可以看出对象表示一个人的信息有整体性,相当于把多个变量放到一个箱子中

/shang_0122/article/details/103677259

声明引用类型

class

interface

delegate

C#数据类型与SQL sever数据类型对应关系

 

本文到此就暂时结束了,感谢阅读,敬请斧正~ ????????????