.net 中的每个对象都有 header ( SyncBlockIndexMethodTablePointer ),当您调用 GetHashCode() 时,如果没有链接到该对象的 SyncBlock,则结果可以保存在 SyncBlockIndex 中,或者如果有,则保存在 SyncBlock 中。

当我们不覆盖 GetHashCode 方法时,哈希码是对象存在期间的保存,但是如果我们返回动态哈希码(取决于对象的状态),哈希码将如何存储?

我知道在对象存在期间哈希码应该是相同的,问题的目的是了解哈希码是如何存储在 SyncBlockIndex 或 SyncBlock 中的。

最佳答案



如果哈希码是通过覆盖 GetHashCode 动态计算的,则不会存储在任何地方...
SyncBlockIndex 用作对象的“默认”哈希码是一个实现细节,不应依赖于框架之外的任何内容。

关于c# - 哈希码是否存储在 SyncBlockIndex/SyncBlock 中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34053741/

10-10 10:25