变量初始化
.NET要求声明变量后初始化值才可以使用;
所以int a;中的a不能用
int a = 2;中的a才能用
这也就是为什么对象实例化后里面的成员变量为什么是自己有初始值的,int的话是0,bool的话是false.
数据类型
【 值类型:拷贝】
举例:int i = 5; int j = i;修改j的值后i的变化:不变
内存:i的值和j的值各存了一份、
结果:修改自己不影响对方
【引用类型:借用】
举例:int[] array1 = {1}; int[] array2 = array1;array2[0]=2;array1[0]是多少?
内存:array1的大小在内存只有一份,array1和array中存的都是这个数组的首地址
结果:array1[0]原来是1现在是2
值类型与引用类型对比:
- 赋值:
- 值类型赋的是一个 值,是新创建了一个对象
- 引用类型赋的是一个引用,是一个地址
- 效率:
- 值类型使用我们想要的值直接使用
- 引用类型存的是引用,是地址,还需要转换地址映射,慢
- 内存分配:
- 值类型是放在 栈 中
- 引用类型是放在 堆 中
- 内存释放:
- 值类型使用完就释放,例如一个方法里创建了一个局部变量,在个方法结束后这个局部变量的内存就释放了
- 引用类型:如上一章的内存引用技术,使用完后不会立刻释放,GC去检查……
装箱拆箱–影响效率
装箱:值类型转换为引用类型的过程(.NET自动做的)
**自动做的:int x = 5;
***********Person p = new Person();
***********p.num = 5;
拆箱:引用类型转换为值类型的过程
**被动做的: int x = 0;
***********Person p = new Person();
***********x = (int)p.num; //这里写了(int)强转,是被动
数据类型图
总结画图如下:
- 基类是object,object是引用类型
- string是引用类型,但和值类型是一样的
- 浮点型用doble,float因为精度不够已经很少用了
- 像int和double之间这样基本数据类型转换,性能不会损失的
控制
- if-else
- switch-case
- case的前后和性能无关
- case只能是常量
- case无执行语句会执行下一个case
- while
- 循环次数不确定
- do-while
- 至少执行一次
- for
- 用来循环固定次数
- foreach
- 迭代集合每一项,但是不能修改集合
- break
- 跳出当前循环
- continue
- 跳过这一次的循环
- return
命名空间
命名空间是为了区分类的!
类的全程是命名空间+类名
本文介绍了C#中的变量初始化、数据类型、值类型与引用类型的差异、装箱与拆箱的概念及控制语句等内容。深入探讨了值类型和引用类型在内存分配、赋值和效率上的区别。

898

被折叠的 条评论
为什么被折叠?



