我正在实现我自己的 ArrayList 用于学校目的,但为了增加趣味性,我正在尝试使用 C# 4.0 代码合同。一切都很好,直到我需要将合同添加到构造函数中。我应该在空参数构造函数中添加 Contract.Ensures() 吗?
public ArrayList(int capacity) {
Contract.Requires(capacity > 0);
Contract.Ensures(Size == capacity);
_array = new T[capacity];
}
public ArrayList() : this(32) {
Contract.Ensures(Size == 32);
}
我会说是的,每种方法都应该有一个明确定义的合同。另一方面,如果它只是将工作委派给“主要”构造函数,为什么还要这样做呢?从逻辑上讲,我不需要。
我看到在两个构造函数中显式定义合约的唯一一点是,如果将来我们对合约有 Intelisense 支持。如果发生这种情况,明确每种方法具有哪些合同会很有用,就像 Intelisense 中出现的那样。
此外,是否有任何书籍可以更深入地介绍合同设计的原则和用法?一件事是了解如何在语言(在本例中为 C#)中使用合同的语法,另一件事是了解如何以及何时使用它。我阅读了几个教程和 Jon Skeet 的 C# in Depth 文章,但如果可能的话,我想更深入一点。
谢谢