image.png

image.png

一、什么是Type

type是数据在内存中存储的型号。
性质相同的值的集合,这些值配备了一系列针对这些值的操作。
不同type的数据的容量不同,小存大会丢失数据,大存小会浪费。

二、强类型语言和弱类型语言

如果程序中数据收到类型的约束则为强类型语言,否则为弱类型。
弱类型:如JavaScript,其中的var 就是无类型约束。
强类型:C#、Java、C++ ,都有明确的数据类型。

C#有对弱类型语言的模仿

C#中的var 和 JavaScript的var 不是一个东西,C#中对应的关键字是dynamic关键字。

三、Type在C#中的作用

image.png

包含大小、范围

字节

字节也叫Byte,是计算机数据的基本存储单位,在电脑里一个中文字占两个字节。
一位指1bit
8bit(位)=1Byte(字节)
1024Byte(字节)=1KB
1024KB=1MB
1024MB=1GB
1024GB=1TB
计算机存储是使用二进制
比如 char 16bit 无符号,所以不需要一个bit来表示符号,16个二进制,转换为十进制,【0,65535】。
int 32bit 有符号,所以是31位的二进制表计算,然后加上符号。
float 32bit 7位小数
double 64bit 15-16位小数

动态、静态

静态:代码的编辑期和编译期。此时代码在硬盘里面。
动态:代码的运行期。代码在内存里面。
运行一个程序指的是代码从静态转换为动态(硬盘装载到内存里)。
双击文件运行之后(动态),会参产生一个进程(和文件同名)

确定包含的成员

静态时期提前知道有哪些成员,能对数据进行检验,保证编译的准确性。
动态时期,能使用反射,找到相应类型。能立刻知道该type有哪些成员。这样我们就能对其进行操作。

  1. Type myType = typeof(Form);
  2. PropertyInfo[] pInfos = myType.GetProperties();
  3. foreach(){
  4. Console.WriteLine(item.Name);//所有参数名字
  5. }
  6. Console.WriteLine(myType.Name);//类型名
  7. //Console.WriteLine(myType.FullName);//全名 带名称空间

程序运行的变量内存分配

C#会根据类型判断变量分配到栈还是堆,实例永远在堆里。
例:Game game = new Game();
Game game声明部分表示地址和对应类型,地址能存储指向对于类型实例所在地址,在栈里。
new Game()实例在堆里。

Stack栈

作用:方法调用时使用
空间小,速度快,容易爆栈内存。方法调用过多、一口气分配栈内存过多都会爆掉栈内存。
image.png每次调用会切出一块内存存X,无限调用必爆。
image.png一口气切走大量内存,必爆。

Heap堆

作用:存储对象,实例放在这。
空间大不会爆,容易被无数的未回收对象占用大量空间,成称为内存泄漏。
C++不回收必定泄漏,C#有自动GC。

四、C#语言的类型系统

image.png
object、string是一个具体的类,是属于类的,类是抽象的概念,没有具体的类,所有具体类都继承于object。
image.png