是数据在内存中存储时的型号
! 编程语言中的数据类型与数学中的数据类型不完全相同
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类型解决灵活性问题
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);
程序在运行的时候,此类型的变量分配在内存的何处
//栈爆 只递不归
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
类(Classes):Window,Form,Console,String
结构体 (Structures):Int32,Int64,Single,Double
枚举(Enumerations): HorizontalAlignment,Visibility
接口 (Interfaces):
委托 (Delegates):
变量名对应着变量的值在内存中的存储位置
表面 变量的用途是存储数据
实质 变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值可以存入变量
Tips: 变量=以变量名对应的内存地址为起点、以其数据类型所要求的存储空间为长度的一块内存区域
值类型变量
引用类型的变量与实例
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#课程