类型:也称数据类型,不同数据类型在内存中所占的空间大小是不同的,同时不同的数据类型能进行的相关操作也是不同的,例如Double类型3.0/4.0会得到结果0.75,而当int类型3/4会得到结果0。除此之外,大内存的数据类型存储小内存的数据时会发生内存空间的浪费,而小内存的数据类型存储大内存的数据时会损失精度发生错误。C#语言属于强类型语言,对于数据的数据类型要求比较严格,定义一个变量时必须标明它的数据类型。一个数据类型有明确的存储空间,该类型的值的范围,以及该类型所包含的成员(方法,属性,事件等)。
程序的方法存储在栈内存中,局部变量也在栈内存中,类和实例在堆内存当中。
C#数据类型:
引用类型:类(Console,Form),接口(Interface),委托(Delegates)
值类型:结构体(Int32,Single),枚举(Visibility)
变量:变量其实就是表示了存储位置,并且每个变量都有一个类型,同时决定了什么值能够赋给该变量。变量主要有七种:静态变量(在类当中定义的变量,这个变量是类自带的,比如这个类的的数量),实例变量(也是在类中定义的变量,可以理解为实例的一个属性),数组,值参数(定义方法时声明对什么数据类型进行操作时定义对的变量),引用参数(ref),输出形参(out),局部变量(在方法体里面的定义的变量)。
变量的声明:有效修饰符+数据类型+变量名+数据初始化
内存:局部变量会直接存储在栈中,当声明一个局部变量时,会根据数据类型所占的内存在栈中开辟一段空间,然后将数据转化为二进制进行存储,这里需要注意,存储时按照高对高,低对低的原则进行存储,即转化的二进制数高位对应存储地址的高位。而要定义一个实例变量时,比如定义一个学生类:
class Student
{
int id;
int age;
}
当我在主方法当中要定义一个实例变量时,
Student stu = new Student();
会首先自动在栈中分配四个字节的内存,并且全部存入0,然后会在堆内存当中找到一块内存,这个内存的大小等于Student类中定义的变量的数据类型大小之和,然后将首地址存入到栈内存之前分配的空间当中。
常量:用const修饰,在声明常量时必须赋初值,并且一旦赋完初值之后不能再对该变量再次赋值。
装箱:在方法中定义了一个变量x,该变量存储在栈当中,这时又定义了一个object类型的变量,将x赋值给这个object类型的变量,那么此时会在栈中开辟一段空间,这段空间不会去存储x的数据值,而是会将x的数据值在堆内存中找到一段对应大小内存去存储x的数据值,然后将这段内存的首地址转化为二进制存储到在栈中开辟的这段空间当中。
拆箱:现在又在方法当中声明了一个变量y,现在要将object赋值给变量y,
int y = (int)obj;
那么此时会首先在栈中开辟一段空间,然后找object存入的地址对应的数据值,然后将数据值存入到这段开辟的空间当中。
装箱和拆箱会损失程序性能。
//以上内容仅代表个人学习心得与理解