[Issue 7584] contract checking is too conservative for inherited contracts

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Feb 26 07:35:09 PST 2012


http://d.puremagic.com/issues/show_bug.cgi?id=7584



--- Comment #3 from deadalnix <deadalnix at gmail.com> 2012-02-26 07:35:07 PST ---
(In reply to comment #2)
> Again, give an example. Your claim is not true.

In Foo, you sated, by contract, that the function must return 0. Any piece of
code using an object of type Foo rely on the fact that this function return 0.
It is in the contract.

As Bar is a subclass of Foo, it has to respect the contract. An object of type
Bar can be passed to any piece of code expecting an object of type Foo. So,
that piece of code cannot rely on that contract anymore.

In your case, the out contract of Foo.foo should be an unittest. You want that
to be true for object of type Foo, but not for object of subtypes. So contract
isn't the right tool for the job.

Bar doesn't respect Foo's contract, so the contract must fail. This is the
expected behavior. If it weren't the case, then it would be a violation of
Liskov substitution principle, because I couldn't pass an object of type Bar to
a piece of code expecting Foo.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list