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.