使用代码协定,我是否需要通过“确保”验证字段/属性初始化

本文关键字:确保 验证 字段 初始化 属性 代码 是否 | 更新日期: 2023-09-27 18:27:53

using System.Diagnostics.Contracts;
class C
{
    public C(bool x)
    {
        Contract.Ensures(this.X == x);  // is this necessary?
        this.X = x;
    }
    public readonly bool X;  // could be a property instead,
}                            // I'm just trying to keep this example simple

此构造函数的要点是初始化字段,而合约仅捕获该意图。协定与它所适用的代码具有相同的复杂性。对我来说,这感觉是多余的,就好像我刚刚写了两次相同的代码(尽管从两个略有不同的角度(。

这种"微契约"是必要的,还是代码合约从方法体推断出这些?

使用代码协定,我是否需要通过“确保”验证字段/属性初始化

我的意见是肯定的。

如果从实现推断合同,则对实现的任何更改都可能更改合同。这就像在 1.0.0 版本中发布一个接口,并在 1.0.1 中由于简单的错误修复而对其进行重大更改。当你向我保证X = x我是你的代码的用户时,我希望你信守诺言。请记住,例如,合约程序集也可以与 NuGet 包中的库一起分发。