c# - 为什么 Marshal.DestroyStructure 被认为是 Pure?

标签 c# .net unmanaged code-contracts

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

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

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

最佳答案

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

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

关于c# - 为什么 Marshal.DestroyStructure 被认为是 Pure?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049227/

相关文章:

c# - 协助对测试进行分类

c# - 如何隐藏继承属性(property)?

c# - 使用 ComboBox 将 DataGridView 绑定(bind)到 DataTable 不起作用

c# - 从 C# 调用非托管 .dll 的性能

c# - 在内部使用 double 生成随机整数

c# - 如何在 C# 中填写 RSAParameters 值

c# - 生成带有变量条目/参数的列表

.net - 32 位 CPU 上的 Int64 实现

c++ - 使用没有内联代码的 dll 时出现 LNK2028 和 LNK2019 错误

vb6 - VB6 有 linq 表达式吗?