object - забудьте. Это старые объекты из TurboPascal-я.
Пример на классах:
| Код | type TBase = class private FField1: Integer; FField2: String; public constructor Create(const AField1: Integer; const AField2: String); virtual; property Field1: Integer read FField1; property Field2: String read FField2; end;
TChild1 = class(TBase) private FField3: Extended; FField4: Boolean; public constructor Create(const AField1: Integer; const AField2: String; const AField3: Extended; const AField4: Boolean); reintroduce; property Field3: Extended read FField3; property Field4: Boolean read FField4; end;
TChild2 = class(TBase) private FField5: Cardinal; FField6: Byte; public constructor Create(const AField1: Integer; const AField2: String; const AField5: Cardinal; const AField6: Byte); reintroduce; property Field5: Cardinal read FField5; property Field6: Byte read FField6; end;
constructor TBase.Create(const AField1: Integer; const AField2: String); begin inherited Create;
FField1 := AField1; FField2 := AField2; end;
constructor TChild1.Create(const AField1: Integer; const AField2: String; const AField3: Extended; const AField4: Boolean); begin inherited Create(AField1, AField2);
FField3 := AField3; FField4 := AField4; end;
constructor TChild2.Create(const AField1: Integer; const AField2: String; const AField5: Cardinal; const AField6: Byte); begin inherited Create(AField1, AField2);
FField5 := AField5; FField6 := AField6; end;
var Obj: array of TBase; begin SetLength(Obj, 3);
Obj[0] := TBase.Create(1, '1'); Obj[1] := TChild1.Create(2, '2', 3.4, False); Obj[2] := TChild2.Create(3, '3', 9, 0);
Tag := Obj[0].Field1 + Obj[1].Field1 + Obj[3].Field1;
if Obj[0] is TChild2 then Tag := Tag + TChild2(Obj[0]).Field5; if Obj[1] is TChild2 then Tag := Tag + TChild2(Obj[1]).Field5; if Obj[2] is TChild2 then Tag := Tag + TChild2(Obj[2]).Field5;
FreeAndNil(Obj[2]); FreeAndNil(Obj[1]); FreeAndNil(Obj[0]); end; |
(писал на коленке, могут быть опечатки)
|