3

這是一個非常普遍的想法,但讓我們在這個例子中使用C#。這個陳述可以被認爲是一個類不變嗎?

鑑於

  • 我有一個一次性類Foo,它實現IDisposable
  • Foo有一個布爾標誌disposed這是直到Dispose被稱爲後,它的真正
  • Foo的所有公開方法將引發ObjectDisposedException如果disposedtrue它們被調用時。

請問這種說法

Foo任何方法,除了Dispose上已經佈置了的Foo實例調用時,將拋出ObjectDisposedException

描述了一個不變量Foo

回答

2

這是一套所有類的方法共同的規則。不變量不是方法的規則。

契約式設計包括定義合同的以下部分:

  • 方法的前提條件
  • 方法後置
  • 類不變

你所描述的方法後置條件。它們屬於每個函數的合同(當然這是該類合同的一部分),但不屬於類不變性。

0

這不是一個不變量。這是關於對象狀態的陳述。海事組織,你所描述的是一種處置方法的所有方法的後置條件和後置條件。

相關問題