美文网首页
C#中的List、Dictionary、事件、栈和堆、struc

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

作者: 全新的饭 | 来源:发表于2022-04-06 11:59 被阅读0次

    List

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

    Dictionary

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

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

    事件

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

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

    栈和堆

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

    struct

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

    相关文章

      网友评论

          本文标题:C#中的List、Dictionary、事件、栈和堆、struc

          本文链接:https://www.haomeiwen.com/subject/sgyrsrtx.html