C#中的List、Dictionary、事件、栈和堆、struc

2022-04-06  本文已影响0人  全新的饭

List

内部是用数组实现的,效率并不高,只是通用性强。
如果可以的话,最好在构造List时提前告知它最多会有多少元素存在里面,避免List频繁抛弃原有数组申请新数组。
没有对多线程做任何锁或同步操作,因此在多线程中使用时要自己加安全机制(加锁)。

Dictionary

由数组构成,由哈希函数完成地址构建,通过拉链法解决冲突。
哈希函数:元素的关键字K为自变量,映射到元素的存储地址。
拉链法:将具有相同散列地址的关键字的值放在同一个单链表中。

实例化时最好能确定大致数量。
用值做key比用类实例做key更高效。
在多线程中使用时需自己加lock。

事件

在delegate的基础上再做了一次封装,限制用户操作delegate委托实例中变量的权限。

  1. 不能直接赋值
  2. 可以通过注册+=或注销-=来增减数量。避免用了=后清空之前累积的委托链表

栈和堆

栈:生命周期必须确定,销毁时按次序销毁,后进先出。
堆:生命周期不确定(随时可释放)

struct

何时使用?
当使用“=”时,想要传递的是该对象的副本还是该对象的引用(对象本身)?
若是副本,则用struct。

上一篇下一篇

猜你喜欢

热点阅读