Hai record, oggetti e classi.
I record sono disponibili dal turbo pascal 1.Sono leggeri, in grado di avere proprietà e metodi, ma non supportano l'ereditarietà. Ci sono alcuni problemi con le funzioni che restituiscono i record. Se questi record hanno metodi questo a volte dà errori interni:
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;
Gli oggetti sono introdotti con turbo pascal 5 se sono corretto. Hanno quindi fornito un modo per OO con pascal. Sono più o meno deprecati con l'introduzione di Delphi, ma puoi ancora usarli. Gli oggetti possono implementare interfacce.
Le classi sono introdotte con Delphi 1 e la più versatile. Implementano interfacce e supportano l'ereditarietà. Ma ogni variabile di classe è un puntatore nascosto. Ciò significa che le classi devono essere create nell'heap. Fortunatamente questo processo è in gran parte nascosto.
Di seguito è riportata una tabella con le differenze tra i tre. Ho aggiunto l'interfaccia per il completamento.
|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 | - |
------------------|-----------------------------|
fonte
2009-05-09 17:45:13
Si può dare un'occhiata al [nostro Array involucro dinamico] (http://blog.synopse.info/post/2011/03/12/TDynArray-and-Record-compare/load/save-using -fast-RTTI), che aggiunge metodi simili a TList per qualsiasi array dinamico. È anche in grado di serializzare il contenuto dell'array/record. Ho anche scoperto un errore casuale in Delphi 2010 (almeno), sugli oggetti: a volte, [gli oggetti conteggio di riferimento non sono stati inizializzati] (http://blog.synopse.info/post/2011/01/29/record-and -oggetto-problema-in-Delphi-2010)! In questo caso, devi usare i record per tali strutture. –