Tiene registros, objetos y clases.
Los registros están disponibles desde turbo pascal 1.Son livianos, capaces de tener propiedades y métodos, pero no admiten la herencia. Hay algunos problemas con las funciones que devuelven registros. Si estos registros tienen métodos esto a veces da errores internos:
type
TRec = record
function Method1: Integer;
end;
function Func: TRec;
procedure Test;
var
x : TRec;
begin
Func.Method1; // Sometimes crashes the compiler
// Circumvention:
x := Func;
x.Method1; // Works
end;
objetos se introducen con Turbo Pascal 5 si estoy en lo correcto. Luego proporcionaron una forma de OO con Pascal. Están más o menos obsoletos con la introducción de Delphi, pero aún puedes usarlos. Los objetos pueden implementar interfaces.
Las clases se introducen con Delphi 1 y las más versátiles. Implementan interfaces y admiten herencia. Pero cada variable de clase es un puntero oculto. Esto significa que las clases deben crearse en el montón. Por suerte, este proceso está oculto en su mayoría.
A continuación se muestra una tabla con las diferencias entre los tres. Agregué la interfaz para completarla.
|Class|Object|Record|Interface|
------------------|-----------------------------|
Are pointers? | y | n | n | y |
Inheritance | y | y | n | y |
Helpers | y | n | y | n |
Impl. Interface | y | y | n | - |
Visibility | y | y | n | n |
Method | y | y | y | y |
Fields | y | y | y | n |
Properties | y | y | y | y |
Consts | y | y | y | n |
Types | y | y | y | n |
Variants | n | n | y | n |
Virtual | y | n | y | - |
------------------|-----------------------------|
Puede echar un vistazo a [nuestra envoltura matriz dinámica] (http://blog.synopse.info/post/2011/03/12/TDynArray-and-Record-compare/load/save-using -fast-RTTI), que añaden métodos similares a TList para cualquier matriz dinámica. También es capaz de serializar el contenido de la matriz/registro. También descubrí un error al azar en Delphi 2010 (al menos), sobre objetos: a veces, [los objetos contados de referencia no se inicializaron] (http://blog.synopse.info/post/2011/01/29/record-and -object-issue-in-Delphi-2010)! En este caso, debe usar registros para tales estructuras. –