6

Marshal.DestroyStructure 在 .NET Framework 中被标记为 Pure 属性,但我不确定为什么它明显对调用它的上下文有影响。

状态被修改(指针被释放),即使它不直接修改指针实例本身。

问题中隐含的是:开发人员是否可以善意地将某些东西标记为纯,即使她知道它间接修改了上下文的状态?

4

1 回答 1

2

从某种意义上说它是纯的,它对可见的托管状态没有影响,这意味着,出于代码契约的目的,调用该方法不能违反类不变量。

诚然,将方法视为纯方法有点误导,因为它确实有副作用,即使这些副作用是不可见的。它们是可观察的(如果您在释放指针后尝试使用指针,则会导致失败),但并不完全可见(如果不尝试使用指针就无法判断出问题所在。)我不确定将方法标记为 Pure 的动机是什么,因为我不明白为什么它会在 Contracts 块中使用,但我猜在 BCL 合约的深处一定有某种原因需要它。

于 2012-10-24T14:09:48.050 回答