3

这是一个非常普遍的想法,但让我们在这个例子中使用C#。这个陈述可以被认为是一个类不变吗?

鉴于

  • 我有一个一次性类Foo,它实现IDisposable
  • Foo有一个布尔标志disposed这是直到Dispose被称为后,它的真正
  • Foo的所有公开方法将引发ObjectDisposedException如果disposedtrue它们被调用时。

请问这种说法

Foo任何方法,除了Dispose上已经布置了的Foo实例调用时,将抛出ObjectDisposedException

描述了一个不变量Foo

回答

2

这是一套所有类的方法共同的规则。不变量不是方法的规则。

契约式设计包括定义合同的以下部分:

  • 方法的前提条件
  • 方法后置
  • 类不变

你所描述的方法后置条件。它们属于每个函数的合同(当然这是该类合同的一部分),但不属于类不变性。

0

这不是一个不变量。这是关于对象状态的陈述。海事组织,你所描述的是一种处置方法的所有方法的后置条件和后置条件。