推荐学习 B 站找的刘铁锰老师老师的 C# 入门视频
类型
C# 是强类型静态语言,声明变量时需要确定变量的类型,程序经过编译器编译后运行
类型 决定了
变量在内存中占用的空间大小,进而确定了
变量的取值范围,例如 sbyte 表示有符号的 一字节大小( 8 位二进制位)的整数,取值范围为 -128 至 127
确定了类型的继承关系 类型 类型还会影响程序运行时,变量存储在堆区还是栈区;变量可以使用哪些操作符 += -= 操作符等
值类型
简单值类型–整数类型 、字符类型、实数类型、布尔类型
复合值类型–结构体类型 、枚举类型
值类型 与 引用类型的区别
- 值类型变量存储在栈中,直接在栈中存放变量对应的数据;引用类型变量存储在栈中,变量对应的数据表示为堆中的某个地址,这个地址代表的堆空间存放的,才是引用对象的数据。
- 值类型存取速度快,引用类型存取速度慢。
- 值类型变量表示实际数据,引用类型变量则表示指向存储在堆中的数据的指针或引用。
- 栈的内存是自动释放的,堆内存是由 .NET GC 自动释放。
- 值类型继承自 System.ValueType , 引用类型继承自 System.Object。
装箱和拆箱
装箱是将值类型转换为 object 类型或由此值类型实现的任何接口类型的过程
装箱:把值类型变量转化为引用类型变量
拆箱:把引用类型变量转化为值类型变量
类型转换
(int)1.2f
int.Parse()
var m = o as Mammal;
Convert.ToString(value, baseValue)
常用容器类
ArrayList
可变长度的数组
List<T>
泛型链表 访问速度快,修改速度慢
HashTable/Dictionary
散列表/字典格式 查询效率高 空间占用较大
Stack
栈 后进先出
Queue
队列 先进先出
ref 和 out 的区别
ref 和 out 可以使函数有多个返回的值
两个关键字都是修饰函数的参数,表示函数形参传递时进行的是引用传递而不是值拷贝,其中 out 传递的引用只为带回返回值,不需要事先声明变量
for forEach enumerator.MoveNext 循环的内存消耗情况
for 循环可以通过索引依次进行遍历,foreach 和 Enumerator.MoveNext 通过迭代的方式进行遍历,内存消耗上本质上并没有太大的区别
注意:使用 forEach 循环时不能删除正在遍历的元素,可以在遍历完后,删除对应索引或 key 的元素