Озаботился тут этим вопросом теоретического интереса ради и получил для себя удивительный ответ!
Как известно есть 2 способа задать свойства объекту
1 2 3 4 5 6 |
... private FSomeProperty:string; public property SomeProperty: string read FSomeProperty write FSomeProperty; ... |
1 2 3 4 5 6 7 |
... private function GetSomeProperty:string procedure SetSomeProperty(AValue:string); public property SomeProperty:string read GetSomeProperty write SetSomeProperty; ... |
А вот и интересный ответ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
type TPerson = class AProperties: Array[0..4] of Variant; function GetProperty(const Index: Integer): Variant; procedure SetProperty(const Index: Integer; const Value: Variant); private property FirstName: Variant index 0 read GetProperty write SetProperty; property MiddleName: Variant index 1 read GetProperty write SetProperty; property LastName: Variant index 2 read GetProperty write SetProperty; property Sex: Variant index 3 read GetProperty write SetProperty; property BirthDay: Variant index 4 read GetProperty write SetProperty; end; TForm18 = class(TForm) procedure FormCreate(Sender: TObject); private Person: TPerson; public { Public declarations } end; var Form18: TForm18; implementation {$R *.dfm} { TMyClass } function TPerson.GetProperty(const Index: Integer): Variant; begin Result := AProperties[Index] end; procedure TPerson.SetProperty(const Index: Integer; const Value: Variant); begin AProperties[Index] := Value; end; procedure TForm18.FormCreate(Sender: TObject); begin Person := TPerson.Create; Person.FirstName := 'Иванов'; Person.MiddleName := 'Иван'; Person.LastName := 'Иванович'; Person.Sex := 'Мужской'; Person.BirthDay := StrToDate('01.01.2000'); end; |
Выходит вместо 4 раз написания Get / Set мы просто обошлись одной парой. В каких случаях это применимо, когда Get / Set ничего другого не содержат кроме присваивания или что-то другое, я пока не понял и не потестил в реальных проектах – но я взял это себе на заметку