On 02/26/2013 03:07 PM, Sven Barth wrote:

The critical difference between records and classes besides the ability of records to reside on the stack is that they don't allow inheritance and they support variable parts. The "don't allow inheritance" is important, because otherwise you'll have a certain overhead like virtual method resolution.
I see. But this does not force that a synonyme for record could be a certain type of class, so that "class" in a straight forward and thus more "future-compatible" way can be used for any combination of fields of multiple types. (of course keeping the "record" syntax for compatibility)


AFAIK even old style Turbo-Pascal "Objects" are still in place.... That
could be a certain type of class as well.

Yes, objects still exist as well and I still don't really understand why Borland didn't revive them instead of adding methods to records...
I suppose they already marked "Object" as obsolete and did not want to admit the bad decision. (Of course more sensible would have been to extend the count of "class" specifier keywords.)

Nevertheless objects are between records and classes: they can also be located on the stack (and be initialized as a constant) like records, yet they support (if you need it) inheritance and virtual methods. They can't implement interfaces though and there is no base object type (similar to TObject). Also they don't support RTTI (though I might change this with the extended RTTI). All three types, records, objects and classes have their purposes and uses and one can select the one that is most fitting in a given situation.
Yep. All in fact are sensible but the multiple syntax is rather queer (disregarding the history that led to it).

-Michael

--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to