fork download
  1. program ideone;
  2.  
  3. {$MODE OBJFPC}{$H+}
  4.  
  5. uses
  6. TypInfo;
  7.  
  8. type
  9. TUser = class(TObject)
  10. private
  11. FUserName: AnsiString;
  12. FLanguage: AnsiString;
  13. protected
  14. function GetPropValue(APropName: AnsiString): AnsiString;
  15. procedure SetPropValue(APropName, AValue: AnsiString);
  16. public
  17. constructor Create();
  18. procedure ShowUserInfo();
  19. public
  20. property Prop[AName: AnsiString]: AnsiString read GetPropValue write SetPropValue; default;
  21. published
  22. property UserName: AnsiString read FUserName write FUserName;
  23. property Language: AnsiString read FLanguage write FLanguage;
  24. end;
  25.  
  26. constructor TUser.Create();
  27. begin
  28. inherited Create();
  29. FUserName := '';
  30. FLanguage := '';
  31. end;
  32.  
  33. function TUser.GetPropValue(APropName: AnsiString): AnsiString;
  34. var
  35. piProp: PPropInfo;
  36. begin
  37. piProp := GetPropInfo(Self, APropName);
  38.  
  39. if Assigned(piProp) then
  40. Result := GetStrProp(Self, piProp);
  41. end;
  42.  
  43. procedure TUser.SetPropValue(APropName, AValue: AnsiString);
  44. var
  45. piProp: PPropInfo;
  46. begin
  47. piProp := GetPropInfo(Self, APropName);
  48.  
  49. if Assigned(piProp) then
  50. SetStrProp(Self, piProp, AValue);
  51. end;
  52.  
  53. procedure TUser.ShowUserInfo();
  54. begin
  55. WriteLn(FUserName, #10, FLanguage, #10);
  56. end;
  57.  
  58. var
  59. usrFurious: TUser;
  60. begin
  61. usrFurious := TUser.Create();
  62. try
  63. { modyfikacja przez poszczególne właściwości }
  64. usrFurious.UserName := 'Furious';
  65. usrFurious.Language := 'Object';
  66. usrFurious.ShowUserInfo();
  67.  
  68. { modyfikacja przez zbiorczą właściwość }
  69. usrFurious['UserName'] := 'Programming';
  70. usrFurious['Language'] := 'Pascal';
  71. usrFurious.ShowUserInfo();
  72. finally
  73. usrFurious.Free();
  74. end;
  75. end.
  76.  
Success #stdin #stdout 0s 440KB
stdin
Standard input is empty
stdout
Furious
Object

Programming
Pascal