Marshal.DestroyStructure は .NET Framework の Pure 属性でマークされていますが、それを呼び出すコンテキストに明らかに影響を与える理由についてはわかりません。
ポインター インスタンス自体を直接変更しない場合でも、状態が変更されます (ポインターが解放されます)。
質問で暗示されているのは、開発者は、それがコンテキストの状態を間接的に変更することを知っていても、誠意を持って何かをPureとしてマークできますか?
Marshal.DestroyStructure は .NET Framework の Pure 属性でマークされていますが、それを呼び出すコンテキストに明らかに影響を与える理由についてはわかりません。
ポインター インスタンス自体を直接変更しない場合でも、状態が変更されます (ポインターが解放されます)。
質問で暗示されているのは、開発者は、それがコンテキストの状態を間接的に変更することを知っていても、誠意を持って何かをPureとしてマークできますか?
可視の管理状態には影響しないという意味で純粋です。つまり、コードコントラクトの目的で、メソッドを呼び出すことでクラスの不変条件に違反することはできません。
確かに、副作用が表示されない場合でも、副作用があるため、この方法を純粋であると考えるのは少し誤解を招きます。それらは観察可能です(ポインターを解放した後に使用しようとすると失敗します)が、正確には表示されません(ポインターを使用しようとしないと、何かが間違っていることを知ることはできません)。メソッドをPureとマークする動機は何でしたか。これは、Contractsブロックで使用された理由がわからないためですが、BCLコントラクトのどこかでそれを必要とする理由があったに違いないと思います。