Marshal.DestroyStructure 在 .NET Framework 中标有 Pure 属性,但我不确定为什么它会明显影响调用它的上下文。
即使不直接修改指针实例本身,状态也会被修改(指针被释放)。
问题中隐含的是:开发人员是否可以真诚地将某些东西标记为 Pure,即使她知道它会间接修改上下文的状态?
最佳答案
它是纯的,因为它对可见的托管状态没有影响,这意味着,出于代码契约的目的,调用该方法不能违反类不变量。
诚然,将此方法视为纯方法有点误导,因为它确实有副作用,即使这些副作用是不可见的。它们是可观察的(如果你在释放它后尝试使用指针,你会导致失败),但不是完全可见的(你不能不尝试使用指针就知道出了什么问题。)我不确定将方法标记为 Pure 的动机是什么,因为我不明白为什么它会被用在 Contracts block 中,但我猜 BCL 合约深处一定有某种原因需要它。
关于c# - 为什么 Marshal.DestroyStructure 被认为是 Pure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049227/