On Fri, Dec 15, 2000 at 12:03:26AM +0900,
MICHAEL.W.WILSON / CUSTOMS.TREAS.GOV wrote:

>      I'm pretty sure that I read something recently saying that the Eiffel 
>      which will be used in the .NET platform looses it's Design-By-Contract 
>      and Multiple Inheritance capabilities. 

Eiffel# doesn't have MI, but it does appear to have DbC.  In fact, I think
ISE will release a utility to bring DbC to other .NET languages.  I think
they found a way to have generics/templates in Eiffel# too.

---Matt


An excerpt from 
http://eiffel.com/doc/manuals/technology/dotnet/eiffelsharp/white_paper.html:

Eiffel# versus Eiffel 

This brief introduction to Eiffel raises a few interesting issues for its 
integration in the Microsoft .NET Framework. Maybe the most challenging is 
the support for multiple inheritance, since the common language runtime 
was designed to support single inheritance only. Because Eiffel# must only 
use the common language runtime, it has to follow the .NET object model 
and thus disallows multiple inheritance of effective or partially deferred 
classes. You may however multiple inherit pure-deferred classes in which 
case they are generated as interfaces. The partially deferred or effective 
parent class, if any, is the base type. 

Eiffel# does not support the new Eiffel constructs that were added after 
the publication of the current edition of Eiffel: The Language. These 
constructs include agents and related classes, generic conformance, and 
generic argument creation. 

Another mismatch between the common language runtime and the Eiffel object 
model is the lack of support for covariance in the former. For this reason 
Eiffel# does not support covariance. That is, you cannot redefine the 
types of the arguments or result of a feature in the descendant of a 
class. 

The last difference between the two languages lies in the semantics of 
expanded types. Expanded types in the .NET Framework are directly mapped 
to the so-called value types. Although fundamentally the same, Eiffel 
expanded types and .NET value types do not behave in the exact same way. 
In particular, value types are sealed, meaning that one cannot inherit 
from them. As a result, you cannot inherit from expanded types in Eiffel#. 

There are no other differences between Eiffel and Eiffel#; in particular 
Eiffel# supports contracts, exception handling, and genericity, some of 
the hallmarks of Eiffel programming.