使用代码协定,我是否需要通过“确保”验证字段/属性初始化
本文关键字:确保 验证 字段 初始化 属性 代码 是否 | 更新日期: 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 包中的库一起分发。