.net 中的每个对象都有 header ( SyncBlockIndex
和 MethodTablePointer
),当您调用 GetHashCode()
时,如果没有链接到该对象的 SyncBlock,则结果可以保存在 SyncBlockIndex
中,或者如果有,则保存在 SyncBlock 中。
当我们不覆盖 GetHashCode
方法时,哈希码是对象存在期间的保存,但是如果我们返回动态哈希码(取决于对象的状态),哈希码将如何存储?
我知道在对象存在期间哈希码应该是相同的,问题的目的是了解哈希码是如何存储在 SyncBlockIndex 或 SyncBlock 中的。
最佳答案
如果哈希码是通过覆盖 GetHashCode
动态计算的,则不会存储在任何地方...SyncBlockIndex
用作对象的“默认”哈希码是一个实现细节,不应依赖于框架之外的任何内容。
关于c# - 哈希码是否存储在 SyncBlockIndex/SyncBlock 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34053741/