一.什么是类型(type)
1.数据类型(高级,内存节省)(不要随意占用内存)
数据在内存中储存的型号
小内存储存大类型会丢失精度,发生错误。
大内存储存小的会丢失浪费内存
编程语言的数据类型和数据的数据类型 不完全相同。(整形相除还是整形)
2.强类型语言与弱类型语言的比较。(受数据类型影响)
c#是强类型语言。(类型要求严格)(保证数据的完整性)
c语言类型要求没有那么严格。(判断与c#有区别)
JavaScript是一个一点都不严格的类型。(变量不受数据类型控制)(灵活性)
c#模仿弱类型
dynamic (数据类型不控制实际赋值)(墙头草数据)
二。类型在c#中的运用
1.一个c#类型中的信息
内存空间大小(根据类型不同,完成分配)(表格)
值得最大最小范围(可以计算出)(2的多少次方)
此类型包含的成员(方法,属性,事件)
(静态:没有执行)(动态:执行时)
静态检验时,通过其中储存的信息,是否通过。
动态:反射,拿到一个类型,立刻知道其中含有的类,并且使用。
mytype.fullname() basetype父类。
类型中的查询 可以获得并且通过(反射方法),获得他背后的属性值,或者方法调用。(长期工作使用)
程序被分配的内存中的位置:
栈和堆:
函数调用,栈(小而且快,调用多会出问题,栈溢出,运行出错)
属性,对象的储存。(堆,不会爆掉,忘记回收内存,内存泄漏)
此类型由何处派生而来( )
程序运行时,变量被分配在内存的什么位置()
此类型所允许的运算()
三。c#语言的类型系统
1.c#的五大数据系统
类(引用)(多)window,form,console,string
有的类无法去寻找他们的父类(class,interface,delegate用来定义的额)
类比推理。(基本数据类型,其他类型由他而来)
(isclass判断是不是类)
结构体(值)(多)int32,int64,double
(F12查看结构体的定义过程 )
枚举(值)(中)horizontal,alignment,visiblity
接口(引用)(暂时不了解)
委托(引用)(暂时不了解)
四。变量,对象和内存
1.什么是变量(变量=以变量名所对应的内存地址为起点,以其数据类型所要求的储存空间为长度的一块内存区域)
变量的实质是一段内存
变量,存储数据(工具)
实际上,变量表示了储存位置(内存),并且变量有确认的类型(一定的类型),决定了什么样的值可以存储。
变量7种:
静态变量(public static 调用时时静态的,属于类,不需要实例化)
实例变量(成员变量,字段)(public 调用时需 要先实例化类)
数组元素(int[] array=new int[100] 调用时array[x])
值参数(public double Add(double a,double b) double a;)
引用参数(double 前面加ref)
输出形参(前面加out)
局部变量(在一个方法中声明,就是其中的局部变量)
狭义的变量指局部变量,因为他的类有自己的名字。(方法体,函数体)
变量的声明
int a;声明a变量 (int 声明)(类型+变量名+初始化名字 )(赋值:初始化器)
2.值类型的变量()
值类型没有实例,所谓实例与变量合成为一。(1byte=8bit)(在内存空余空间内分配)
(通过类型,和计算机内存运用,找到剩余空间,根据数据类型的大小,进行数据类型变换)
(补码,按位取反,+1)(string str=convert.tostring(s,2) )
3.引用类型的变量和实例
引用变量和实例之间的关系:引用类型变量里面存储的数据是对象 的内存地址。
(值类型是根据大小分配,引用类型分4个字节,数据全部是0,堆内存中创建实例,地址存在stu中 +)
(引用类型存储的是,系统 分配内存的地址。)
4.变量的默认值((成员变量 )不赋值,默认值为0)
5.常量(值不可改变的变量)(const修饰符,常量 )
6.装箱与拆箱(性能损失)
int x=100;
object obj=x; obj引用变量,没有值直接为0.
但是有x的话。
(如果计算机检测到你要给变量赋一个栈上的值时,计算机会先将栈上的值放在堆中,
然后,把堆的地址,赋给引用变量。)
拆箱。
从堆中将值复制到栈中。
7.局部变量在(栈)上分配内存,实例是在(堆)上分配内存。