类型
是数据在内存中存储时的型号
! 编程语言中的数据类型与数学中的数据类型不完全相同
e.g
编程语言中 3/4 结果为0。
强类型语言与若类型语言比较
当用X语言编程时,程序中的数据受数据类型的约束很严格 则它为强类型语言 ,反之则为弱类型语言
以C#举例
e.g 1
int x;
x=100;
long y;
y=100L;
//x=100L; 这句报了红线 因为不能将一个长整型数据放到整形变量中
e.g 2
int x=100;
if(x==200)
{Console.WriteLine("OK");}
/* 错
if(x=200) 括号中需要传入bool类型 而此处是赋值
{Console.WriteLine("OK");}*/
e.g 3 C++
int x=100;
if(x=200)//编译也可以通过 因为C++中没有bool类型 它是将其与整数小数混用 只要括号里!0 都为真
{printf("OK\n");}
强类型|弱类型(灵活)|
—|—|
C#|JavaScript|
C#中引入dynamic类型解决灵活性问题
类型在C#中的作用
- 存储此类型的变量所需的内存空间大小
int 占4个字节 32位比特位 ;
long 占8位 64比特位 ;
- 此类型的值可表示的最大、最小值的范围
Type|Range|Size
—|—|—|
sbyte|-128 to 127|Signed 8-bit integer
byte|0 to 255|Unsigned 8-bit integer
char|U+0000 to U+ffff|Unicode 16-bit integer
short|-32,768 to 32,767|Signed 16-bit integer
ushort|0 to 65,535|Unsigned 16-bit integer
int|-2147,483,648 to 2147,483,647|Signed 32-bit integer
uint|…|…
long|…|…
ulong|…|…
-
此类型所包含的成员(方法、属性、事件)
-
静态 编辑器 编译器
-
动态 反射
Type myType = typeof(Form); PropertyInfo[] pInfos = myType.GetProperties(); MethodInfo[] mInfos =myType.GetMethod(); foreach(var p in pInfos) {Console.WriteLine(p.Name); }
-
-
此类型由何基类派生而来(继承关系)
Console.WriteLine(myType.BaseType.BaseType.FullName);
-
程序在运行的时候,此类型的变量分配在内存的何处
- Stack介绍 栈 方法调用 1-2m
- Stack Overflow
//栈爆 只递不归 e.g 1 class Program {Static void Main(String [] args){ BudGuy bg=new BudGuy(); bg.BadMethod(); } } class BadGuy{ public void BadMethod() {int x=100; this.BadMethod();} } e.g 2 class Program { Static void Main(String [] args) { unsafe{int *p=stackalloc int[9999999];} } }
-
Heap 堆 存储对象 较大 几个G
-
使用Performance Monitor 查看进程的堆内存使用量
Win+R perfmon=>Performance Monitor “X”=>“+”=>Process,Private Bytes ,Example,
-
关于内存泄漏 忘记回收
-
此类型所允许的操作(运算)
double result =3.0/4.0;
Console.WriteLine(result); //输出0.75
double result =3/4;
Console.WriteLine(result); //输出0
C#语言的类型系统
- C#的五大数据类型
类(Classes):Window,Form,Console,String
结构体 (Structures):Int32,Int64,Single,Double
枚举(Enumerations): HorizontalAlignment,Visibility
接口 (Interfaces):
委托 (Delegates):
- 图
变量对象与内存
变量名对应着变量的值在内存中的存储位置
表面 变量的用途是存储数据
实质 变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值可以存入变量
- 变量一共有7种
- 静态变量、实例变量(成员变量、字段),数组元素、值参数、引用参数、输出形参、局部变量
- 狭义说的变量指的是局部变量
- 局部变量就是方法体里声明的变量
- 变量的声明
- 有效的修饰符组合 类型 变量名 初始化器
Tips: 变量=以变量名对应的内存地址为起点、以其数据类型所要求的存储空间为长度的一块内存区域
-
值类型变量
- 以byte/sbyte/short/ushort为例
- 值类型没有实例,所谓的“实例”与变量合而为一
-
引用类型的变量与实例
- 引用类型的变量与实例的关系:引用类型变量里存储的是数据的对象的内存地址
class Program{ static void Main(String[] args){ Student stu;//内存分配四个字节 每个比特位都是0 stu=new Student();//堆内存里真正的创建实例6个字节,stu引用实例(堆内存地址保存在变量stu) //存储对实例的引用 } } class Student{ uint ID;//4字节 ushort Score;//2字节 }
//Excel表格演示
-
局部变量是在Stack - 栈上面分配内存
-
变量的默认值 成员变量有 默认0
-
常量(值不可以改变的变量,不可以被再次赋值 声明时带初始化器)
-
**装箱和拆箱 **
class Program{ static void Main(String[] args){ int x = 100; object obj= x;//装箱 int y=(int)obj;//拆箱 Console.WriteLine(); } } }
装拆箱会损失性能
以上是 C#的复习笔记 参考 Timothy Liu的C#课程