سؤال

This is a highly general thought, but let's use C# in this example.

Given that

  • I have a disposable class Foo, i.e., it implements IDisposable.
  • Foo has a boolean flag disposed that is false until Dispose is called, after which it's true.
  • All public methods of Foo throws ObjectDisposedException if disposed is true when they are called.

Does this statement

Any method of Foo, except Dispose, will throw an ObjectDisposedException when called on an instance of Foo that has been disposed.

describe an invariant of Foo?

هل كانت مفيدة؟

المحلول

No.

This is a set of rules common to all the methods of the class. Invariants are not rules for methods.

Design by Contract comprises defining the following parts of a contract:

  • Method preconditions
  • Method postconditions
  • Class invariant

What you are describing are method postconditions. They belong to the contract of each function (which is of course part of the contract of the class), but not to the class invariant.

نصائح أخرى

It's not an invariant. It's a statement about the state of object. IMO, what you described is a dispose method's postcondition and postcondition of all methods.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top