UTypes.pas 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /// Unit UTypes: Delphi-Typsystem-Fixture.
  2. /// Testet: Enums, Records (mit Feldern), Type-Aliase,
  3. /// Konstanten, verschachtelte Typen, Class-Methoden (static).
  4. unit UTypes;
  5. interface
  6. uses
  7. System.SysUtils;
  8. const
  9. C_MAX_RETRIES = 3;
  10. C_DEFAULT_NAME = 'Guest';
  11. type
  12. /// Enum: Benutzerrolle
  13. TUserRole = (urAdmin, urEditor, urViewer);
  14. /// Record: Punkt mit X/Y-Koordinaten
  15. TPoint2D = record
  16. X: Double;
  17. Y: Double;
  18. end;
  19. /// Type-Alias
  20. TUserName = string;
  21. /// Klasse mit class method (static), verschachteltem Typ und Enum-Verwendung
  22. TUserInfo = class
  23. public
  24. type
  25. /// Verschachtelter Record innerhalb der Klasse
  26. TAddress = record
  27. Street: string;
  28. City: string;
  29. Zip: string;
  30. end;
  31. private
  32. FName: TUserName;
  33. FRole: TUserRole;
  34. FAddress: TAddress;
  35. public
  36. constructor Create(const AName: TUserName; ARole: TUserRole);
  37. function GetDisplayName: string;
  38. class function CreateAdmin(const AName: TUserName): TUserInfo; static;
  39. property Name: TUserName read FName write FName;
  40. property Role: TUserRole read FRole;
  41. property Address: TAddress read FAddress write FAddress;
  42. end;
  43. implementation
  44. { TUserInfo }
  45. constructor TUserInfo.Create(const AName: TUserName; ARole: TUserRole);
  46. begin
  47. FName := AName;
  48. FRole := ARole;
  49. end;
  50. function TUserInfo.GetDisplayName: string;
  51. begin
  52. if FRole = urAdmin then
  53. Result := '[Admin] ' + FName
  54. else
  55. Result := FName;
  56. end;
  57. class function TUserInfo.CreateAdmin(const AName: TUserName): TUserInfo;
  58. begin
  59. Result := TUserInfo.Create(AName, urAdmin);
  60. end;
  61. end.