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类型是一种值类型,通常用于封装小型相关变量组。(在这个结构类型中,可以定义多个不同简单值类型的变量)
举个栗子:
-
//定义一个书的特征
-
public struct Book
-
{
-
public decimal price;
-
public string title;
-
public string author;
-
}
❤ 枚举类型
枚举类型是一种值类型, 基于整数类型的一系列命名常量,为了定义枚举类型,通常使用enum关键字和枚举成员的名字。
举个栗子:
-
枚举季节
-
enum Season
-
{
-
Spring,
-
Summer,
-
Autumn,
-
Winter
-
}
引用类型:分配一个地址,存储的是一个内存位置,不指具体的一个数值。【对一个变量执行的操作会影响另一个变量所引用的对象】
引用类型的数据烈性包含以下几种:
❤ 内置的引用类型:
类型 | 描述 |
object | 对象类型:是C#通用类型系统中所有数据类型的终极基类 |
Dynamic | 动态类型:可以存储任何类型的值在动态数据类型变量中 |
String | 字符串类型:可以分配变量任何字符串值 |
对象类型涉及一个装箱和取消装箱问题
装箱是将值类型转换为object类型或由此值类型实现的任何借口类型的过程。
取消装箱是从对象中提取值类型。
-
//装箱 boxing
-
int i = 3 ; //分配在栈上
-
object o = i ; //隐式装箱操作,int i 在堆上
-
object b = (object)i ; //显示装箱操作
-
----------------------
-
//拆箱 unboxing
-
int j = (int) o ; //显示拆箱(将对象o拆箱为int类型)
-
----------------------
-
int k = b ; //error!!, 不能隐式拆箱
/zjtao/p/
深度解读装箱:装箱是先为object变量在堆上开辟一方空间,然后将栈上存放的数值转存到堆上,栈上残留的就是堆上的值所在的位置-------存储地址,所以这样就造成什么问题呢?访问速度慢(先访问栈,然后再去访问堆,访问堆的速度远远慢于访问堆的速度)且占用内存大(需要为变量在堆上开辟空间)
灵魂拷问:为什么访问速度慢且占用内存大,还要使用引用数据呢?直接用值数据不就可以了,栈上存放数值,直接读取数值。
因为运用引用类型可以表示同一对象的不同属性,对其进行封装。
eg:
基本数据都是单一的值"hello"123 true,值和值之间没有联系
比如,表示一个人的信息(name gender age)
-
var name="孙悟空";
-
var gender='男';
-
var age=18;
创建的变量都是独立,不能成为一个整体,比如,gender也可以表示猪八戒的性别,
-
obj.name="孙悟空";
-
obj.gender='男';
-
obj.age=18;
对比之前就可以看出对象表示一个人的信息有整体性,相当于把多个变量放到一个箱子中
/shang_0122/article/details/103677259
❤ 声明引用类型
class
interface
delegate
C#数据类型与SQL sever数据类型对应关系
本文到此就暂时结束了,感谢阅读,敬请斧正~ ????????????