Marshal.DestroyStructure在.NET Framework中标有Pure属性,但我不确定为什么它在调用它的上下文中有明显的影响。
状态被修改(指针被释放),即使它没有直接修改指针实例本身。
问题中隐含的是:开发人员是否真诚地将某事标记为纯粹,即使她知道它间接地修改了上下文的状态?
答案 0 :(得分:2)
纯粹的意思是它对可见的托管状态没有影响,这意味着,为了代码契约的目的,调用该方法不会违反类不变量。
当然,将该方法视为纯粹有点误导,因为它确实有副作用,即使这些副作用不可见。它们是可观察的(如果你试图在释放它之后使用指针,你会导致失败),但是不完全可见(你不能在没有尝试使用指针的情况下判断出错误。)我不确定标记Pure方法的动机是什么,因为我无法理解为什么它会被用在Contracts块中,但我猜测BCL合约中某处需要它的某些原因必然存在。< / p>